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

نمط Enum في Luau

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

البرامج مليئة بالقيم المأخوذة من مجموعة صغيرة وثابتة: كأن يكون الطلب قيد الانتظار (pending)، أو تم شحنه (shipped)، أو تم تسليمه (delivered)؛ أو أن يواجه اللاعب للأعلى (up)، للأسفل (down)، للليسار (left)، أو لليمين (right). تحتوي العديد من اللغات على كلمة مفتاحية enum لهذا الغرض. لغة Luau لا تحتوي عليها — وهي ليست بحاجة إليها، لأن هناك أداتين تمتلكهما بالفعل تؤديان هذه المهمة.

النمط 1: الجدول الثابت (constant table). يقوم جدول عادي بربط أسماء ذات معنى بقيم، مما يستبدل "الأرقام السحرية" المنتشرة في الكود:

local Status = {
    Pending = 1,
    Active = 2,
    Done = 3,
}

print(Status.Active) -- 2

هذه قيمة حقيقية أثناء وقت التشغيل (runtime): يمكنك قراءة Status.Active، ومقارنتها، وتمريرها — تمامًا مثل الجداول التي استخدمتها طوال الوقت.

النمط 2: اتحاد النصوص المباشرة (literal union). نوع يتكون من قيم نصية دقيقة، باستخدام الأنواع المباشرة التي تعرفت عليها في فصل الاتحادات (unions):

type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow"    -- ✗ type error

الاتحاد موجود فقط من أجل أداة فحص الأنواع (checker) — دون أي تكلفة في وقت التشغيل — ولكنه يضمن أن المتغير لا يمكنه حمل أي شيء خارج هذه المجموعة. يتكامل النمطان معًا: يوفر لك الجدول قيمًا في وقت التشغيل تحت اسم واحد؛ بينما يوفر لك الاتحاد ضمانًا في وقت التجميع (compile-time). لاحقًا في هذا الفصل، ستتعرف أيضًا على table.freeze، والتي تحمي الجدول الثابت من التعديل أثناء وقت التشغيل.

جرّب بنفسك

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

quiz iconاختبر نفسك

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

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