Menu
Coddy logo textTech

טיפוסים ליטרליים

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

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

local mode: "dark" = "dark"   -- רק המחרוזת "dark" מותרת
local locked: true = true      -- רק הערך הבוליאני true מותר

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

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 רגיל, הם היו עוברים ללא הפרעה וגורמים לתקלה בזמן הריצה, אם יתמזל מזלך להבחין בכך.

טיפוסים מילוליים מבחינים בין אותיות גדולות לקטנות ומדויקים: "North" לא תואם ל־"north". מחרוזות מילוליות הן המקרה הנפוץ, אבל ערכים מילוליים בוליאניים, וגם מספריים (בגרסאות Luau חדשות יותר), פועלים באותו אופן. התבנית הזאת, איחוד של מחרוזות מילוליות, היא גם הדרך שבה Luau מחליפה את ה־enum של שפות אחרות, כפי שתראו בפרק מאוחר יותר.

challenge icon

אתגר

קל

צרו שלושה כינויי טיפוס של איחוד ערכים מילוליים:

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

הצהירו, באמצעות הכינויים:

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

צרו פונקציה movePlayer(direction: Direction): string שמחזירה "Moving [direction]", ופונקציה updateGameState(state: GameState): string שמחזירה "Game state: [state]".

הדפיסו, כל אחד בשורה נפרדת:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. את הערך של selectedDifficulty

נסו בעצמכם

-- כתבו כאן קוד
-- הגדירו את הטיפוסים Direction / GameState / Difficulty כאיחודים של ערכים ליטרליים
-- הכריזו על playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- הדפיסו את שלוש התוצאות
quiz iconבחנו את עצמכם

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

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

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