מבנים לעומת טבלאות לא מובנות
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 42 מתוך 80.
עכשיו יש לך שתי דרכים לעבוד עם טבלאות רשומות: הדרך החופשית שתמיד השתמשת בה ב-Lua, וצורות מוגדרות. כדאי לעצור לרגע ולראות מה כל אחת מהן נותנת לך.
טבלה חופשית מקבלת כל דבר. לגמישות הזאת יש מחיר: אם תכתוב בטעות שם שדה שגוי (user.nmae), תקבל בשקט nil; אם תשכח שדה, הבאג יתגלה הרחק משם, בזמן הריצה, בכל קוד שייגש לראשונה לשדה החסר:
local user = {name = "Ana", age = 20}
print(user.nmae) -- טבלה ללא מבנה מוגדר: מדפיסה nil בלי להתריעהגדרת צורה מעבירה את הטעויות האלה מזמן הריצה לזמן העריכה. הבודק מסמן את שגיאת ההקלדה ברגע שכתבת אותה, העורך שלך יכול להשלים אוטומטית שמות של שדות, וההגדרה של type משמשת גם כתיעוד של תוכן הטבלה:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ שגיאת טיפוס: המפתח 'nmae' לא נמצא ב-Userאם הגעת מ-TypeScript, שים לב של-Luau אין מילת מפתח interface: type מטפל בכל הצורות. בנוסף, אין בו "מיזוג הצהרות": הגדרה של שני טיפוסים בעלי אותו שם באותו תחום היא שגיאה, ולכן לכל צורה יש בדיוק הגדרה אחת.
הצורות של Luau הן מבניות: כל טבלה עם השדות הנכונים מהטיפוסים הנכונים תואמת, בלי קשר למקום או לאופן שבו נוצרה. גם לטבלאות חופשיות עדיין יש מקום: סקריפטים קצרים ונתונים דינמיים באמת אינם זקוקים לצורה מוגדרת. עם זאת, כשמעבירים נתונים בין פונקציות, צורה תופסת טעויות כשהתיקון שלהן עדיין זול.
אתגר
קלהפכו טבלה ללא מבנה מוגדר לטבלה עם מבנה מוגדר.
- כתבו מעל הטבלה
type Pet = {name: string, age: number}. - הוסיפו לטבלה הצהרת טיפוס:
local pet: Pet = {name = "Biscuit", age = 3}. - הוסיפו מתחת לפקודת ההדפסה הראשונה את
print(pet.age).
לחצו על הרצת קוד: בפלט מופיעים Biscuit ו-3.
נסו בעצמכם
-- טבלה ללא הגדרות קשיחות: שום דבר לא בודק את השדות שלה
local pet = {name = "Biscuit", age = 3}
print(pet.name)
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלהתרגלו בעצמכם: קומפיילר Luau אונליין