الدرس 5 من 10
الدوال وإرجاع أكثر من قيمة
- 11 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
إرجاع أكثر من قيمة بـ return وقيم افتراضية بـ or
الشرح
تعرّف الدالة بـ function name(a, b) ... end، والأفضل أن تكتب قبلها local كما تفعل مع المتغيّرات. وتُرجع الدالة نتيجتها بـ return، وفي Lua تستطيع أن تُرجع أكثر من قيمة مثل return newHp, healed، فيستقبلها من استدعى الدالة هكذا: local hp, healed = heal(90)، دون أن تحتاج إلى جدول أو كائن يجمعها.
ولا تسمح Lua بكتابة قيم افتراضية في سطر تعريف الدالة، فالوسيط (argument) الذي لم يُمرَّر يصل قيمته nil، ولهذا تكتب في أول الدالة amount = amount or 25. وهذا آمن مع الصفر، لأن الصفر يُعدّ صحيحًا في Lua.
لكن هذه الطريقة تفشل مع القيم المنطقية، فـ loud = loud or true تبقى true حتى لو مرّر من استدعى الدالة false صراحةً، ولهذا اكتب معها if loud == nil then loud = true end. وتذكّر أن local hp = heal(90) تأخذ القيمة الأولى وحدها وتتجاهل الباقي دون أي خطأ.
المطلوب
اكتب الدالة heal(hp, amount, maxHp)، واجعل القيمة الافتراضية لـ amount هي 25 ولـ maxHp هي 100. تُرجع الدالة قيمتين: الصحّة بعد الشفاء دون أن تتجاوز maxHp، ثم المقدار الذي شُفي فعلًا.
الفحوص
5 فحوص- الدالة heal معرَّفة
- تُرجع قيمتين هما الصحّة الجديدة ثم المقدار
- الصحّة لا تتجاوز maxHp والمقدار هو ما شُفي فعلًا
- القيمة الافتراضية لـ amount هي 25
- القيمة الافتراضية لـ maxHp هي 100