متغیرها در لوا

تعریف متغیر، تفاوت local و global، تخصیص چندگانه و قوانین نام‌گذاری

متغیر چیست؟

متغیر (Variable) مثل یک جعبه برچسب‌دار است که یک مقدار (عدد، متن و...) را داخلش نگه می‌دارید تا بعداً از آن استفاده کنید:

local name = "علی"     -- جعبه‌ای به نام name با مقدار "علی"
local age = 25          -- جعبه‌ای به نام age با مقدار 25

print(name)             -- علی
print(age)              -- 25

تعریف متغیر در لوا

در لوا نوع متغیر تعریف نمی‌کنید — لوا خودش از روی مقدار تشخیص می‌دهد (تایپ پویا):

local count = 10        -- number
local price = 99.5      -- number (اعشاری)
local title = "لوا"     -- string
local isActive = true   -- boolean

local در برابر global

این یکی از مهم‌ترین مفاهیم لواست:

-- متغیر سراسری (global)
speed = 100

-- متغیر محلی (local)
local health = 50
ویژگیlocalglobal
سرعت دسترسی✅ سریع‌تر❌ کندتر
دامنه (Scope)فقط داخل بلوک تعریفدر کل برنامه
اشغال حافظهبعد از بلوک آزاد می‌شودتا پایان برنامه می‌ماند
خطر تداخل نامکمزیاد
همیشه از local استفاده کنید مگر اینکه دلیل خاصی برای global بودن داشته باشید! متغیرهای global در لوا کندتر هستند و ممکن است ناخواسته با هم تداخل کنند.

دامنه متغیر محلی (Scope)

local x = 10          -- x در کل فایل قابل دسترسی است

do
  local y = 20        -- y فقط داخل این بلوک وجود دارد
  print(x, y)         -- 10 و 20 — هر دو قابل دسترسی
end

print(x)              -- 10
-- print(y)           -- nil! y دیگر وجود ندارد

تخصیص چندگانه

لوا اجازه می‌دهد چند متغیر را هم‌زمان مقداردهی کنید:

local x, y = 10, 20
print(x, y)           -- 10  20

-- جابجایی مقادیر (swap) بدون متغیر کمکی!
x, y = y, x
print(x, y)           -- 20  10

مقدار nil

nil یعنی «هیچ» — متغیری که مقدار ندارد:

local empty
print(empty)          -- nil

local a, b, c = 1     -- فقط a مقدار می‌گیرد
print(a, b, c)        -- 1  nil  nil

قوانین نام‌گذاری

ناموضعیت
name✅ صحیح
user_name✅ صحیح (snake_case — رایج‌ترین)
_temp✅ صحیح
userName✅ صحیح (اما رایج نیست)
2name❌ شروع با عدد
user-name❌ خط تیره مجاز نیست
function❌ کلمه رزرو شده

تغییر مقدار متغیر

local score = 0
print(score)          -- 0

score = 100           -- مقدار جدید
print(score)          -- 100

score = score + 50    -- بر اساس مقدار قبلی
print(score)          -- 150
قرارداد نام‌گذاری در لوا: snake_case برای متغیرها و توابع، PascalCase برای ماژول‌ها، و UPPER_CASE برای ثابت‌ها.

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط