Menu
Coddy logo textTech

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

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

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

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 רגיל, כי הבודק לא יכול לדעת מה המשתמש יקליד. ההמרה :: שלמדתם קודם אומרת לו להתייחס לערך כאל טיפוס ה-enum שלכם:

local direction = io.read() :: Direction

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

challenge icon

אתגר

קל

צרו את טיפוס האיחוד המילולי Direction עם האיברים "up", "down", "left" ו־"right".

צרו פונקציה move שמקבלת direction: Direction ומדפיסה Moving [direction]...

צרו פונקציה getMovementDescription שמקבלת direction: Direction, מחזירה string ומטפלת בכל איבר באמצעות if/elseif/else:

  • "up" → Going upward
  • "down" → Going downward
  • "left" → Turning left
  • "right" → Turning right

קראו שורה אחת מהמשתמש באמצעות io.read() והמירו אותה ל־Direction באמצעות ::. לאחר מכן:

  1. קראו ל־move עם הכיוון
  2. הדפיסו את התוצאה של getMovementDescription עבור אותו כיוון

נסו בעצמכם

-- כתבו כאן קוד
-- 1) הגדירו את הטיפוס Direction
-- 2) כתבו את move ואת getMovementDescription (if/elseif/else)
-- 3) קראו את הקלט: local direction = io.read() :: Direction
-- 4) קראו ל-move, ואז הדפיסו את התיאור
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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