شرط if...elseif...else در لوا

تصمیم‌گیری در لوا با if، then، elseif، else و مقادیر truthy/falsy

شرط چیست؟

شرط به برنامه اجازه می‌دهد تصمیم بگیرد: «اگر این شرط درست بود، این کار را بکن؛ وگرنه آن کار را».

ساختار if در لوا

if condition then
  -- اگر شرط درست باشد این اجرا می‌شود
end
توجه کنید که لوا از then استفاده می‌کند (نه آکولاد یا دونقطه) و بلوک با end بسته می‌شود.

if ساده

local age = 20

if age >= 18 then
  print("شما بزرگسال هستید")
end

if...else

local score = 45

if score >= 50 then
  print("قبول شدید! 🎉")
else
  print("متأسفانه مردود شدید")
end

if...elseif...else

local score = 85

if score >= 90 then
  print("نمره: A")
elseif score >= 80 then
  print("نمره: B")
elseif score >= 70 then
  print("نمره: C")
elseif score >= 60 then
  print("نمره: D")
else
  print("نمره: F")
end
لوا شرط‌ها را از بالا به پایین بررسی می‌کند و به‌محض پیدا شدن شرط درست، بقیه را چک نمی‌کند. پس ترتیب شرط‌ها مهم است!

مقادیر truthy و falsy

در لوا فقط این‌ها «نادرست» (falsy) هستند:

همه چیز دیگری درست (truthy) است — حتی 0 و "":

local value = 0
if value then
  print("صفر هم اجرا می‌شود!")   -- این چاپ می‌شود
end

شرط‌های تو در تو

local age = 25
local hasTicket = true

if age >= 18 then
  if hasTicket then
    print("ورود مجاز است")
  else
    print("بلیط لازم دارید")
  end
else
  print("سن کافی نیست")
end

ترکیب شرط‌ها با and/or

local age = 25
local isStudent = true

-- هر دو شرط باید درست باشند
if age >= 18 and isStudent then
  print("تخفیف دانشجویی بزرگسال")
end

-- حداقل یکی درست باشد
if age < 12 or age > 65 then
  print("تخفیف ویژه")
else
  print("قیمت عادی")
end

-- نفی شرط
if not isStudent then
  print("دانشجو نیستید")
end

الگوی بررسی nil

local function process(value)
  if value == nil then
    print("مقدار وجود ندارد!")
    return
  end
  print("پردازش: " .. tostring(value))
end

process("سلام")
process(nil)

عملگر سه‌تایی با and/or

لوا عملگر سه‌تایی ندارد، اما با and/or می‌توان ساخت:

local age = 20
local status = age >= 18 and "بزرگسال" or "کودک"
print(status)   -- بزرگسال
این الگو فقط وقتی امن است که مقدار «درست» falsy نباشد (nil/false). وگرنه همیشه مقدار or برگردانده می‌شود!

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

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