Menu
CoddyTech

أشكال الجداول مقابل الجداول الحرة

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 42 من 80.

لديك الآن طريقتان للتعامل مع جداول السجلات: الطريقة غير المقيّدة التي استخدمتها دائمًا في Lua، والأشكال المُعلنة. يجدر بنا التوقف قليلًا لمعرفة ما الذي تقدمه كل طريقة.

يقبل الجدول غير المقيّد أي شيء. لهذه المرونة ثمن: إذا أخطأت في كتابة اسم حقل (user.nmae) فستحصل بصمت على nil؛ وإذا نسيت حقلًا، فلن يظهر الخطأ إلا بعيدًا عن موضعه، أثناء التشغيل، في أول شيفرة تصل إلى ذلك الحقل المفقود:

local user = {name = "Ana", age = 20}
print(user.nmae) -- جدول غير صارم: يطبع nil دون تنبيه

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

type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ خطأ في النوع: المفتاح 'nmae' غير موجود في User

إذا كنت قادمًا من TypeScript، فتذكّر أن Luau لا تحتوي على الكلمة المفتاحية interface؛ إذ يتولى type التعامل مع جميع الأشكال. ولا يوجد أيضًا «دمج للتعريفات»: فتعريف نوعين بالاسم نفسه في النطاق ذاته يُعد خطأ، لذا يكون لكل شكل تعريف واحد بالضبط.

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

challenge icon

التحدي

سهل

حوّل جدولًا غير محدد البنية إلى جدول ذي بنية مُعلنة.

  1. اكتب فوق الجدول type Pet = {name: string, age: number}.
  2. أضف نوعًا إلى الجدول: local pet: Pet = {name = "Biscuit", age = 3}.
  3. أضف print(pet.age) أسفل جملة الطباعة الأولى.

اضغط على Run Code: سيعرض الناتج Biscuit و3.

جرّب بنفسك

-- جدول غير مقيّد: لا شيء يتحقق من حقوله
local pet = {name = "Biscuit", age = 3}
print(pet.name)

جميع دروس مقدمة إلى Luau

تدرّب بنفسك: مترجم Luau عبر الإنترنت