מאפיינים אופציונליים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 41 מתוך 80.
לא כל שדה תמיד קיים. ב-Lua, קריאה של שדה חסר בטבלה פשוט מחזירה nil, וזה גמיש, אבל כך גם באגים כמו attempt to concatenate a nil value עלולים להתגנב פנימה.
ב-Luau אפשר לציין זאת במפורש בהגדרת מבנה: מוסיפים ? אחרי טיפוס השדה כדי לסמן שהוא אופציונלי:
type User = {
name: string, -- חובה
email: string?, -- אופציונלי: string או nil
}
local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ תקין, email הוא אופציונליכבר פגשת את זה קודם עם משתנים: string? הוא קיצור של string | nil. עכשיו אותו רעיון חל גם על שדות בודדים במבנה.
מכיוון ששדה אופציונלי עשוי להיות nil, צריך לבדוק לפני שמשתמשים בו. תבנית Lua הקלאסית עובדת, ובמצב strict הבודק מצמצם את הטיפוס בתוך הענף:
if bob.email then
print(`email: {bob.email}`) -- כאן email הוא מחרוזת
else
print("no email on file")
endאופציונלי פירושו "עשוי להיות חסר". אין פירושו "כל טיפוס". אם email קיים, הוא עדיין חייב להיות מחרוזת.
אתגר
קלהדפס אנשי קשר שייתכן שחסרה להם כתובת אימייל.
- כתבו
type User = {name: string, email: string?}, ואזlocal mia: User = {name = "Mia", email = "mia@coddy.tech"}ו-local leo: User = {name = "Leo"}. - כתבו
local function printContact(user: User)שמדפיסה`{user.name}: {user.email}`, או`{user.name}: no email`כשאין כתובת אימייל. - קראו לה עבור
mia, ואז עבורleo.
לחצו על Run Code: הפלט מציג את Mia: mia@coddy.tech ואת Leo: no email.
נסו בעצמכם
-- 1) הגדירו את הטיפוס User עם email אופציונלי, ואז את mia ואת leo
-- 2) הגדירו את printContact(user: User) עם בדיקה של email
-- 3) קראו לה עבור mia, ואז עבור leo
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלהתרגלו בעצמכם: קומפיילר Luau אונליין