بهترین شیوهها و بهینهسازی لوا
سبک کدنویسی، local در برابر global، بهینهسازی حلقهها و الگوهای سریع
چرا سبک کدنویسی مهم است؟
کد خوب کدی است که: خوانا، قابل نگهداری و سریع باشد. در این مبحث قواعد طلایی کدنویسی لوا را مرور میکنیم.
قاعده ۱: همیشه local
-- بد: سراسری و کند
count = 0
-- خوب: محلی و سریع
local count = 0
قاعده ۲: local کردن توابع کتابخانه
-- هر بار جدول string جستجو میشود
local s = string.format("%d", 42)
-- یک بار local کنید — سریعتر
local fmt = string.format
local s2 = fmt("%d", 42)
قاعده ۳: ایندکس مستقیم بهجای table.insert
-- قابل قبول
local t = {}
for i = 1, 100 do
table.insert(t, i)
end
-- سریعتر: ایندکس مستقیم
local t2 = {}
for i = 1, 100 do
t2[i] = i
end
قاعده ۴: الحاق رشته در حلقه = فاجعه!
-- خیلی کند: هر بار رشته جدید میسازد
local s = ""
for i = 1, 10000 do
s = s .. i .. ","
end
-- سریع: جدول + concat
local parts = {}
for i = 1, 10000 do
parts[i] = i
end
local s2 = table.concat(parts, ",")
قاعده ۵: نامگذاری معنادار
-- مبهم
local d = 86400
-- واضح
local SECONDS_PER_DAY = 86400
قاعده ۶: توابع کوچک و تکمسئولیتی
-- بهجای یک تابع غولپیکر:
function validate(input) ... end
function transform(data) ... end
function save(result) ... end
قاعده ۷: بررسی نوع ورودی
local function transfer(amount)
assert(type(amount) == "number", "amount باید عدد باشد!")
assert(amount > 0, "amount باید مثبت باشد!")
end
سبک استاندارد لوا
- تورفتگی: ۲ یا ۴ فاصله
- نامگذاری: snake_case برای متغیر/تابع
- ثابتها: UPPER_CASE
- حداکثر طول خط: ~۱۰۰ کاراکتر
چکلیست نهایی
- ☐ همه متغیرها local هستند؟
- ☐ توابع کتابخانه در حلقههای داغ local شدهاند؟
- ☐ الحاق رشته با table.concat انجام میشود؟
- ☐ نامها معنادارند؟
- ☐ ورودیهای مهم validate میشوند؟
این مبحث بخشی از دوره آموزش کامل لوا است.