الدرس 4 من 10
جداول داخل جداول
- 12 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
وصول آمن إلى العمق
الشرح
قيمة الحقل قد تكون جدولًا آخر، وهكذا تُبنى حالة اللاعب كلها: hero.equipment.weapon.name اسم سلاحه، وhero.inventory.items قائمة أغراضه. متغيّر واحد يحمل اللاعب بكل ما فيه، وتمرّره إلى أي دالة.
لكن ليس كل لاعب مكتمل البيانات: الفلاح لا سلاح له، واللاعب الجديد لا حقيبة معه بعد. وpeasant.equipment.weapon ترمي attempt to index a nil value (field 'equipment') وتوقف السكربت كله. وفي خادم لعبة يعني هذا أن سجلًّا ناقصًا واحدًا يوقف الحلقة التي تمرّ على كل اللاعبين.
والحماية بسلسلة and: a and b تُرجع a إن كانت nil أو false دون أن تنظر في b. فـ player.equipment and player.equipment.weapon تتوقّف عند أول مستوى ناقص وتُرجع nil بلا خطأ، ثم يضع or البديل. وللكتابة أنشئ المستوى الناقص قبل النزول إليه: player.inventory = player.inventory or {}.
المطلوب
أصلح weaponName(player) لتُرجع اسم السلاح أو "بلا سلاح"، واكتب itemCount(player) تُرجع عدد player.inventory.items أو 0، وaddItem(player, item) تضيف إلى player.inventory.items وتنشئ ما ينقص منه دون أن تمسح الموجود.
معايير التصحيح
6 معايير- weaponName تقرأ اسم السلاح
- ولا تنهار حين ينقص مستوى
- itemCount تعدّ الأغراض
- وتُرجع 0 بلا حقيبة
- addItem تنشئ المستويات الناقصة
- ولا تمسح الموجود