الدرس 7 من 10

الإغلاق ومصانع الدوال

هدف الدرس

دوال تحتفظ بحالتها

01

الشرح

الدالة في Lua قيمة كالرقم والنصّ: تُسند إلى متغيّر، وتُمرَّر، وتُرجعها دالة أخرى. والدالة المعرَّفة داخل دالة ترى متغيّراتها المحلية، وتحتفظ بها بعد أن تنتهي الخارجية. هذا هو الإغلاق (closure).

ومنه نمط المصنع: makeCounter() تعرّف local count = 0 ثم تُرجع دالة تزيده. كل نداء للمصنع يصنع count جديدًا، فلكل عدّاد حالته، ولا يصل إليها أحد من الخارج. وبه تُبنى مؤقّتات القدرات: لكل قدرة وقت آخر استعمال خاصّ بها.

والخطأ الشائع أن تضع local count = 0 خارج المصنع، فتتشارك العدّادات كلها متغيّرًا واحدًا. وفي المؤقّت لا تسجّل الوقت إلا حين يُقبل الاستعمال، وإلا صارت كل محاولة مرفوضة تمدّد الانتظار.

02

المطلوب

اكتب makeCounter() تُرجع دالة تُرجع 1 ثم 2 ثم 3 مع كل نداء. وmakeCooldown(seconds) تُرجع دالة use(now): إن كان هذا أول استعمال أو مضت seconds على آخر استعمال مقبول سجّلت now وأرجعت true، وإلا أرجعت false. والوقت now يُمرَّر وسيطًا، وفي اللعبة يأتي من ساعة المحرّك.

معايير التصحيح

6 معايير
  1. العدّاد يُرجع 1 ثم 2 ثم 3
  2. كل عدّاد مستقلّ بحالته
  3. الاستعمال الأول مسموح
  4. يُرفض قبل انقضاء المدّة ويُقبل عند تمامها
  5. المحاولة المرفوضة لا تعيد ضبط المؤقّت
  6. لكل قدرة مؤقّتها
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

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

6 معايير في بطاقة «المطلوب».