Menu
CoddyTech

מבנים לעומת טבלאות לא מובנות

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

challenge icon

אתגר

קל

הפכו טבלה ללא מבנה מוגדר לטבלה עם מבנה מוגדר.

  1. כתבו מעל הטבלה type Pet = {name: string, age: number}.
  2. הוסיפו לטבלה הצהרת טיפוס: local pet: Pet = {name = "Biscuit", age = 3}.
  3. הוסיפו מתחת לפקודת ההדפסה הראשונה את print(pet.age).

לחצו על הרצת קוד: בפלט מופיעים Biscuit ו-3.

נסו בעצמכם

-- טבלה ללא הגדרות קשיחות: שום דבר לא בודק את השדות שלה
local pet = {name = "Biscuit", age = 3}
print(pet.name)

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

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