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

الأنواع اللفظية (Literal Types)

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

تسمح الأنواع مثل string بأي سلسلة نصية، لكن أحيانًا لا تكون منطقية إلا بضع قيم محددة تمامًا. يستخدم نوع literal القيمة نفسها بوصفها النوع:

local mode: "dark" = "dark"   -- يُسمح فقط بالسلسلة "dark"
local locked: true = true      -- يُسمح فقط بالقيمة المنطقية true

بمفردها، تُعد الأنواع ذات القيمة الواحدة مجرد أمر طريف. ولكن عند دمجها مع unions، تصبح إحدى أكثر أدوات Luau فائدة: مجموعة مضبوطة بدقة من القيم allowed:

type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"

local move: Direction = "north"     -- ✓
local state: GameState = "playing"  -- ✓
-- local bad: Direction = "diagonal" -- ✗ خطأ في النوع!

والآن، سيُكتشف خطأ مطبعي مثل "nort" أو قيمة غير صالحة مثل "diagonal" أثناء التحرير، بينما مع string عادي ستمرّ هذه الأخطاء دون عائق وتتسبب في حدوث عطل وقت التشغيل، إذا كنت محظوظًا بما يكفي لملاحظتها.

تكون أنواع literal حساسة لحالة الأحرف ودقيقة: لا تتطابق "North" مع "north". تُعد String literals الحالة الشائعة، لكن literal من نوع boolean و(في إصدارات Luau الأحدث) literal من نوع number تعمل بالطريقة نفسها. يُستخدم هذا النمط، أي union من String literals، أيضًا بالطريقة التي تستبدل بها Luau تعداد اللغات الأخرى، كما سترى في فصل لاحق.

challenge icon

التحدي

سهل

أنشئ ثلاثة أسماء مستعارة للنوع literal-union:

  • Direction = "north" | "south" | "east" | "west"
  • GameState = "menu" | "playing" | "paused" | "gameover"
  • Difficulty = "easy" | "medium" | "hard"

صرّح باستخدام الأسماء المستعارة:

  • playerDirection: Direction = "north"
  • currentState: GameState = "playing"
  • selectedDifficulty: Difficulty = "medium"

أنشئ function ‏movePlayer(direction: Direction): string تُرجع "Moving [direction]"، وfunction ‏updateGameState(state: GameState): string تُرجع "Game state: [state]".

اطبع، كل قيمة في سطر مستقل:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. قيمة selectedDifficulty

جرّب بنفسك

-- اكتب الكود هنا
-- type Direction / GameState / Difficulty كاتحادات حرفية
-- أعلن playerDirection، currentState، selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- اطبع النتائج الثلاث
quiz iconاختبر نفسك

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

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

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