Menu
CoddyTech

שימוש ב-Enums של איחודי ערכים מילוליים

חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 58 מתוך 80.

איחודים של ערכים מילוליים מוכיחים את ערכם כפרמטרים של פונקציות. מגדירים פרמטר באמצעות האיחוד, ובודק הטיפוסים מבטיח שהפונקציה תיקרא רק עם איבר תקף:

type Direction = "up" | "down" | "left" | "right"

local function move(direction: Direction)
    print(`Moving {direction}...`)
end

move("left")  -- ✓
move("north") -- ✗ שגיאת טיפוס: אינו Direction

בתוך הפונקציה, טפלו בכל האיברים באופן ממצה באמצעות שרשרת if/elseif. מכיוון שהטיפוס מגביל את הקלט לארבעה ערכים, בדיקה של שלושה מהם והסתמכות על else עבור הערך האחרון מכסה את כל האפשרויות:

local function describe(direction: Direction): string
    if direction == "up" then
        return "Going upward"
    elseif direction == "down" then
        return "Going downward"
    elseif direction == "left" then
        return "Turning left"
    else
        return "Turning right"
    end
end

יש כאן סיבוך קטן: מחרוזות שמגיעות מבחוץ, כמו io.read(), מקבלות את הטיפוס string פשוט, כי בודק הטיפוסים לא יכול לדעת מה המשתמש יקליד. אופרטור ההמרה של Luau, ::, פותר זאת: value :: Type אומר לבודק להתייחס לערך כאילו הוא מהטיפוס הזה. השיעור על הצהרות טיפוס לקראת סוף היחידה הזאת עוסק בהמרות לעומק; בינתיים, שורה אחת מספיקה:

local direction = io.read() :: Direction

המרה היא הבטחה, לא בדיקה — בזמן הריצה לא מאמתים את הקלט. בקוד שמיועד לשימוש אמיתי יש לאמת אותו תחילה; כאן ההמרה מאפשרת לפונקציות עם טיפוסים לקבל קלט מהמשתמש בצורה נקייה.

challenge icon

אתגר

קל

הפוך כיוון שהשחקן הקליד לפעולה.

  1. כתוב type Direction = "up" | "down" | "left" | "right".
  2. כתוב local function getAction(direction: Direction): string שמחזירה "Climb", "Drop", "Turn left" או "Turn right".
  3. קרא את local direction = io.read() :: Direction והדפס את getAction(direction).

לחץ על הרצת קוד: עם הקלט up, הפלט מציג Climb.

נסו בעצמכם

-- 1) טיפוס Direction
-- 2) getAction(direction: Direction): string
-- 3) local direction = io.read() :: Direction, ואז להדפיס את הפעולה

כל השיעורים ביחידה מבוא ל-Luau

תרגלו בעצמכם: קומפיילר Luau אונליין