Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

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

أصبح لديك الآن طريقتان للتعامل مع جداول السجلات: الطريقة loose التي استخدمتها دائمًا في Lua، والأشكال المعلنة (declared shapes). يستحق الأمر التوقف لفترة وجيزة لمعرفة ما تقدمه لك كل منهما.

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

local user = {name = "Ana", age = 20}
print(user.nmae) -- loose table: silently prints nil

قم بالتصريح عن شكل (shape) وستنتقل تلك الأخطاء من وقت التشغيل إلى وقت التحرير (edit time). يكتشف الفاحص (checker) الخطأ الإملائي في اللحظة التي تكتبه فيها، ويمكن للمحرر إكمال أسماء الحقول تلقائيًا، كما يعمل التصريح بـ type كتوثيق لما يحتويه الـ table:

type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ type error: key 'nmae' not found in User

إذا كنت قادمًا من TypeScript، فلاحظ أن Luau لا يحتوي على الكلمة المفتاحية interface — فالكلمة المفتاحية type تتولى التعامل مع كل شكل. لا يوجد أيضًا "دمج للتصريحات" (declaration merging): التصريح عن نوعين بنفس الاسم في نفس النطاق يعتبر error، لذا فإن كل شكل له تعريف واحد فقط بالضبط.

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

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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