Menu
Coddy logo textTech

הקפאת טבלאות קבועות

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

לטבלת קבועים יש חולשה אחת: היא עדיין טבלה רגילה. כל קוד, בכל מקום, יכול לכתוב UserRole.Admin = 99, וה״קבועים״ שלך מפסיקים להיות קבועים בלי שתבחין בכך.

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

local Color = table.freeze({
    Red = 1,
    Green = 2,
    Blue = 3,
})

print(Color.Red) -- 1: הקריאה פועלת כרגיל
Color.Gold = 4   -- ✗ שגיאה: ניסיון לשנות טבלה לקריאה בלבד

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

שני דברים נוספים שכדאי להכיר: table.isfrozen(t) מחזירה אם טבלה קפואה, וההקפאה היא שטחית: טבלאות מקוננות נשארות ניתנות לשינוי, אלא אם כן מקפיאים גם אותן. אי אפשר גם לבטל את ההקפאה: מרגע שטבלה הוקפאה, היא נשארת קפואה.

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

challenge icon

אתגר

קל

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

  • Red = 1
  • Green = 2
  • Blue = 3

צור טבלה רגילה (שאינה מוקפאת) בשם settings עם שדה volume = 5.

הדפס, כל ערך בשורה נפרדת:

  1. Color.Red
  2. Color.Blue
  3. האם Color מוקפאת (table.isfrozen)
  4. האם settings מוקפאת
  5. התוצאה של הניסיון להוסיף שדה ל-Color בתוך pcall: קרא ל-pcall(function() Color.Gold = 4 end) והדפס את הערך הבוליאני שהיא מחזירה

נסו בעצמכם

-- כתבו כאן קוד
-- 1) local Color = table.freeze({Red = 1, Green = 2, Blue = 3})
-- 2) local settings = {volume = 5}
-- 3) הדפיסו את Color.Red, את Color.Blue ואת שתי התוצאות של isfrozen
-- 4) השתמשו ב-pcall כדי לנסות את הכתיבה האסורה והדפיסו את הערך הבוליאני שהוחזר
quiz iconבחנו את עצמכם

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

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

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