שימוש ב-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המרה היא הבטחה, לא בדיקה; בזמן ריצה שום דבר לא מאמת את הקלט. בקוד שמיועד לסביבת ייצור יש לבצע אימות קודם; כאן היא מאפשרת לפונקציות מטויפסות לקבל קלט מהמשתמש בצורה נקייה.
אתגר
קלצרו את טיפוס האיחוד המילולי 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 באמצעות ::. לאחר מכן:
- קראו ל־
moveעם הכיוון - הדפיסו את התוצאה של
getMovementDescriptionעבור אותו כיוון
נסו בעצמכם
-- כתבו כאן קוד
-- 1) הגדירו את הטיפוס Direction
-- 2) כתבו את move ואת getMovementDescription (if/elseif/else)
-- 3) קראו את הקלט: local direction = io.read() :: Direction
-- 4) קראו ל-move, ואז הדפיסו את התיאור
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים8Enums בדרך של Luau
תבנית ה-Enum ב-LuauEnums מספריים באמצעות טבלאותEnums של מחרוזות כאיחודיםשימוש ב-Enums של איחודי ערכים מילולייםהקפאת טבלאות קבועותסיכום: Enums בדרך של Luau3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין