أشكال الجداول مقابل الجداول الحرة
جزء من قسم مقدمة إلى 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 بنيوية: أي جدول يحوي الحقول الصحيحة بالأنواع الصحيحة يطابق الشكل، بغض النظر عن مكان أو كيفية إنشائه. وتظل للجداول غير المقيّدة استخداماتها: فالبرامج النصية السريعة والبيانات الديناميكية فعلًا لا تحتاج إلى شكل مُعلن. لكن بالنسبة إلى أي شيء يُمرر بين الدوال، يساعد الشكل على اكتشاف الأخطاء وهي لا تزال زهيدة الكلفة.
التحدي
سهلحوّل جدولًا غير محدد البنية إلى جدول ذي بنية مُعلنة.
- اكتب فوق الجدول
type Pet = {name: string, age: number}. - أضف نوعًا إلى الجدول:
local pet: Pet = {name = "Biscuit", age = 3}. - أضف
print(pet.age)أسفل جملة الطباعة الأولى.
اضغط على Run Code: سيعرض الناتج Biscuit و3.
جرّب بنفسك
-- جدول غير مقيّد: لا شيء يتحقق من حقوله
local pet = {name = "Biscuit", age = 3}
print(pet.name)
جميع دروس مقدمة إلى Luau
1البدء مع Luau
ما هي Luau؟لماذا نستخدم Luau؟أول كود لك بلغة Luauفحص الأنواع وأنماط الأخطاءملخص: مقدمة إلى Luau4العمل مع الدوال
تحديد أنواع المعاملات والقيم المُعادةتحديد أنواع الدوال المجهولةالدوال التي لا تُعيد قيمةالمعاملات الاختياريةالقيم الافتراضية للمعاملاتالقيم الافتراضية للمنطقيةالدوال ذات المعاملات المتغيرةتعريف أنواع الدوالمراجعة: الدوال ذات الأنواع المحددة2الأنواع الأساسية
الأعداد والسلاسل النصية والقيم المنطقيةالنوع 'any': مخرج عند الضرورةالنوع 'unknown'الأنواع الخالية والاختياريةاستدلال الأنواع عمليًاالتصريحات الصريحة للأنواعمراجعة: تدريب على الأنواع الأساسية5الأسماء المستعارة، الأنواع المشتركة، والأنواع المتقاطعة
الأسماء المستعارة للأنواع الأوليةأنواع الاتحاد (Union Types)التعامل مع أنواع الاتحادالأنواع اللفظية (Literal Types)أنواع التقاطع (Intersection Types)دمج الأسماء المستعارة للأنواعملخص: تجميعات الأنواع المتقدمة3الجداول محددة الأنواع: المصفوفات والخرائط
المصفوفات محددة الأنواعإضافة العناصر وقراءتهاما نوع Map؟تعريف الخرائط والوصول إليهاالتكرار عبر الجداولالجداول ذات البُنى المختلطةقراءة شبكةإنشاء شبكةtable.unpackمراجعة: المصفوفات والخرائط6تحديد أشكال الجداول (Typing Table Shapes)
توضيحات أشكال الجداول المضمنةأسماء مستعارة للأنواع لأشكال الجداولالخصائص الاختياريةأشكال الجداول مقابل الجداول الحرةتوسيع أشكال الجداولإضافة الدوارل إلى أشكال الجداولSelf والدوال المسبوقة بنقطتين (Colon Methods)ملخص: تعريف أشكال الجداول9الأنواع المعممة (Generics): نظرة أولى
المشكلة التي تحلها الأنواع المعممةدالة هوية معممةاستخدام دالة معممةالمصفوفات المعممةأسماء مستعارة للأنواع المعممةملخص: الدوال المعممةتدرّب بنفسك: مترجم Luau عبر الإنترنت