מאפיינים אופציונליים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 39 מתוך 73.
לא כל שדה תמיד קיים. ב-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 הקלאסית מתאימה, ובמצב מחמיר הבודק מצמצם את הטיפוס בתוך הענף:
if bob.email then
print(`email: {bob.email}`) -- כאן email הוא מחרוזת
else
print("no email on file")
endאופציונלי פירושו "עשוי להיעדר". זה לא אומר "כל טיפוס". אם email קיים, הוא עדיין חייב להיות מחרוזת.
אתגר
קלצרו כינוי טיפוס בשם User עם:
nameמטיפוסstring(חובה)emailמטיפוסstring?(אופציונלי)
צרו שני משתמשים:
alice: שם"Alice", אימייל"alice@luau.dev"bob: שם"Bob", ללא אימייל
צרו פונקציה printContact שמקבלת User. אם יש למשתמש אימייל, היא מדפיסה [name] - [email]; אחרת היא מדפיסה [name] - no email.
לאחר מכן:
- קראו ל-
printContact(alice) - קראו ל-
printContact(bob) - הדפיסו את תוצאת ההשוואה
bob.email == nil
נסו בעצמכם
-- כתבו כאן קוד
-- 1) הגדירו את הטיפוס User עם שדה email אופציונלי
-- 2) צרו את alice (עם email) ואת bob (בלי email)
-- 3) כתבו את printContact עם בדיקה של nil
-- 4) קראו לה עבור שני המשתמשים, ואז הדפיסו את התוצאה של bob.email == nil
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלהתרגלו בעצמכם: קומפיילר Luau אונליין