الدرس 3 من 10

الجمل الشرطية

هدف الدرس

لا يُعدّ خاطئًا إلا nil وfalse

01

الشرح

الجملة if cond then ... end تنفّذ ما بداخلها إذا تحقّق الشرط، وelseif تضيف شرطًا آخر، وelse لكل ما بقي، وتكفي end واحدة لإغلاق السلسلة كلها. وتُفحص الفروع بالترتيب، ولا يُنفَّذ إلا أول فرع يتحقّق شرطه. وتجمع الشروط بـ and وor وnot، وتكتب «لا يساوي» هكذا ~= لا !=.

وأكبر فرق بين Lua واللغات الأخرى أن قيمتين فقط تُعدّان خاطئتين في الشرط، هما nil وfalse، أما 0 والنصّ الفارغ "" فيُعدّان صحيحين. فالشرط if gold then يتحقّق حتى لو كان الذهب صفرًا، وnot gold لا تعني «لا يوجد ذهب»، ولهذا قارن صراحةً هكذا: gold == 0 وguild ~= "".

وand وor تُرجعان أحد الطرفين نفسه لا true أو false، ومن هنا جاء النمط الشائع cond and a or b بديلًا عن العامل الثلاثي (ternary). لكن هذا النمط يفشل إذا كانت a نفسها false أو nil، فـ safe and false or true تعطي true دائمًا، لأن true and false تعطي false فينتقل or إلى true.

02

المطلوب

استعمل سلسلة if وelseif وelse لتجعل status «ميت» إن كانت hp صفرًا أو أقلّ، و«حرج» إن كانت أقلّ من 30، و«سليم» فيما عدا ذلك. واجعل guildLabel هو guild، أو «بلا نقابة» إن كان فارغًا، وbroke قيمته true إن كان gold صفرًا، وcanAttack قيمته false داخل المنطقة الآمنة inSafeZone وtrue خارجها.

الفحوص

5 فحوص
  1. المتغيّر status يساوي «ميت» حين تكون hp صفرًا
  2. التصنيف مكتوب بسلسلة if وelseif
  3. المتغيّر guildLabel يساوي «بلا نقابة» لأن النصّ الفارغ يُعدّ صحيحًا
  4. قيمة broke هي true لأن الصفر لا يُعدّ خاطئًا
  5. قيمة canAttack هي false في المنطقة الآمنة
main.lua
المخرجاتLua 5.4 (wasmoon)

نحمّل بيئة Lua الآن.

–/5

يبدأ الفحص حين تجهز البيئة.

تجد 5 فحوص في بطاقة «المطلوب».