0Pricing
Lua Academy · درس

عبارات if وelseif وelse

اكتب منطق التفرّع الشرطي باستخدام صياغة Lua ‏if/elseif/else

عبارات if وelseif وelse درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

عبارة if الأساسية

تقيّم عبارة if شرطًا وتنفّذ كتلتها عندما يكون الشرط صحيحًا. في Lua، القيمتان false وnil فقط زائفتان؛ أما كل ما عداهما، بما في ذلك 0 و""، فهو صحيح. أنهِ الكتلة باستخدام end.

local score = 85

if score >= 90 then
  print("A grade")
end

if score >= 60 then
  print("Passing")   -- prints
end

if 0 then
  print("0 is truthy!")  -- prints in Lua
end

if/elseif/else

اربط عدة شروط باستخدام elseif، وقدّم حالة بديلة باستخدام else. تقيّم Lua الشروط من الأعلى إلى الأسفل، وتنفّذ أول فرع مطابق فقط. وعلى خلاف switch/case في اللغات الأخرى، فإن elseif في Lua كلمة مفتاحية واحدة، وليست else if.

local score = 75

if score >= 90 then
  print("A")
elseif score >= 80 then
  print("B")
elseif score >= 70 then
  print("C")   -- prints
elseif score >= 60 then
  print("D")
else
  print("F")
end

العوامل المنطقية في الشروط

تستخدم Lua العوامل المنطقية and وor وnot. وهي تُقيّم بالتوقّف المبكر: تُرجع and أول قيمة زائفة أو القيمة الأخيرة، بينما تُرجع or أول قيمة صحيحة أو القيمة الأخيرة. ويتيح ذلك أنماط القيم الافتراضية الاصطلاحية.

local age = 25
local hasID = true

if age >= 18 and hasID then
  print("Entry allowed")
end

-- or for defaults
local name = nil
local display = name or "Guest"
print(display)   -- Guest

النمط الاصطلاحي للمشغّل الثلاثي باستخدام and/or

لا تحتوي Lua على مشغّل ثلاثي، لكن نمط and/or يقرّبه: condition and trueVal or falseVal. ويعمل ذلك ما دامت trueVal ليست false أو nil. ولمنطق ثلاثي أكثر أمانًا، استخدم دالة if مضمنة.

local x = 10
local label = (x > 5) and "big" or "small"
print(label)   -- big

-- Safe ternary function
local function ternary(cond, t, f)
  if cond then return t else return f end
end
print(ternary(false, "yes", "no"))  -- no

عبارات if المتداخلة

يمكنك تداخل عبارات if داخل الفروع الأخرى. وتتطلب كل كتلة متداخلة عبارة end خاصة بها. وغالبًا ما يشير التداخل العميق إلى إمكانية استخدام عمليات الإرجاع المبكر أو عبارات الحراسة لتبسيط المنطق.

local loggedIn = true
local isAdmin = false

if loggedIn then
  if isAdmin then
    print("Admin dashboard")
  else
    print("User dashboard")  -- prints
  end
else
  print("Login required")
end

عبارات الحراسة

عبارة الحراسة هي إرجاع مبكر يتعامل مع الحالات غير الصالحة أو الحدّية في بداية الدالة، مما يقلل التداخل. ويحافظ هذا النمط على إبقاء مسار التنفيذ الأساسي بلا إزاحة بادئة، ويجعله أسهل قراءة.

local function processAge(age)
  if type(age) ~= "number" then
    return nil, "age must be a number"
  end
  if age < 0 then
    return nil, "age cannot be negative"
  end
  -- happy path
  return math.floor(age)
end

print(processAge(25.7))   -- 25
print(processAge(-1))     -- nil  age cannot be negative

مقارنة القيم

عوامل المقارنة في Lua هي: == (يساوي)، و~= (لا يساوي)، و<، و>، و<=، و>=. ملاحظة: ~= هو عامل «لا يساوي» في Lua، وليس !=. تستخدم مقارنات السلاسل النصية الترتيب المعجمي. ولا يمكنك مقارنة السلاسل النصية بالأعداد مباشرة.

print(1 == 1)      -- true
print(1 ~= 2)      -- true
print("abc" < "abd")  -- true (lexicographic)
print("10" == 10)  -- false (different types)

-- Safe nil check
local val = nil
if val == nil then
  print("no value")
end

تساوي السلاسل النصية

تكون سلسلتان نصيتان متساويتين في Lua إذا وفقط إذا كان محتواهما بالبايت وطولهما متماثلين. وتخزّن Lua السلاسل النصية داخليًا، لذا غالبًا ما تشير السلاسل المتساوية إلى موضع الذاكرة نفسه، مما يجعل == مقارنة سريعة للمؤشرات. لا تقارن السلاسل النصية باستخدام is أو مقارنة المراجع؛ إذ تقارن == دائمًا حسب القيمة.

local s1 = "hello"
local s2 = "hel" .. "lo"

print(s1 == s2)     -- true (same content)
print(s1 == "Hello") -- false (case sensitive)

-- Check for empty string
local name = ""
if name == "" or name == nil then
  print("name is empty or nil")
end

مقارنة الجداول والدوال

تُقارن الجداول والدوال حسب المرجع لا حسب المحتوى. ولا تكون قيمتا جدولين مختلفين لهما المحتوى نفسه متساويتين إلا إذا كانتا الكائن نفسه. استخدم دوال metamethod مثل __eq لتعريف تساوي مخصص للجداول.

local t1 = {1, 2, 3}
local t2 = {1, 2, 3}
local t3 = t1

print(t1 == t2)   -- false (different objects)
print(t1 == t3)   -- true (same reference)

local f1 = function() end
local f2 = function() end
print(f1 == f2)   -- false

الأنماط الاصطلاحية

من الأنماط الاصطلاحية الشائعة في Lua مع الشروط: استخدام assert() للتحقق من الشروط المسبقة، واستخدام حيلة and/or لتعيين قيم افتراضية مختصرة، وتجنب النفي المزدوج (not not x) لتحويل أي قيمة إلى قيمة منطقية.

-- assert pattern
local function sqrt(n)
  assert(n >= 0, "sqrt of negative")
  return math.sqrt(n)
end

-- Convert to boolean
local val = 42
local boolVal = not not val
print(boolVal)   -- true

-- Default parameter
local function greet(name)
  name = name or "World"
  print("Hello, " .. name)
end
greet()          -- Hello, World

تحقّق سريع

ما القيم الزائفة في Lua؟

مراجعة: الشروط

الملخص:

  • if ... elseif ... else ... end — الصيغة الكاملة للتفرع
  • القيمتان nil وfalse فقط زائفتان
  • تُقيّم and/or بالتوقّف المبكر وتُرجعان قيم المعاملات
  • ‏~= يعني «لا يساوي» في Lua (وليس !=)
  • تُقارن الجداول والدوال حسب المرجع، والسلاسل النصية حسب القيمة
  • استخدم عبارات الحراسة لتقليل التداخل

الأسئلة الشائعة

هل درس «عبارات if وelseif وelse» مجاني؟

نعم — نص درس «عبارات if وelseif وelse» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «عبارات if وelseif وelse»؟

اكتب منطق التفرّع الشرطي باستخدام صياغة Lua ‏if/elseif/else تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «عبارات if وelseif وelse»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. عبارات if وelseif وelse
  2. حلقات while وrepeat-until
  3. حلقة for الرقمية
  4. for العامة وbreak
← العودة إلى Lua Academy