טיפוסים ליטרליים
חלק מהיחידה מבוא ל-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 של שפות אחרות, כפי שתראו בפרק מאוחר יותר.
אתגר
קלצרו שלושה כינויי טיפוס של איחוד ערכים מילוליים:
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]".
הדפיסו, כל אחד בשורה נפרדת:
movePlayer(playerDirection)updateGameState(currentState)- את הערך של
selectedDifficulty
נסו בעצמכם
-- כתבו כאן קוד
-- הגדירו את הטיפוסים Direction / GameState / Difficulty כאיחודים של ערכים ליטרליים
-- הכריזו על playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- הדפיסו את שלוש התוצאות
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין