Menu
Coddy logo textTech

מאפיינים אופציונליים

חלק מהיחידה מבוא ל-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 קיים, הוא עדיין חייב להיות מחרוזת.

challenge icon

אתגר

קל

צרו כינוי טיפוס בשם User עם:

  • name מטיפוס string (חובה)
  • email מטיפוס string? (אופציונלי)

צרו שני משתמשים:

  • alice: שם "Alice", אימייל "alice@luau.dev"
  • bob: שם "Bob", ללא אימייל

צרו פונקציה printContact שמקבלת User. אם יש למשתמש אימייל, היא מדפיסה [name] - [email]; אחרת היא מדפיסה [name] - no email.

לאחר מכן:

  1. קראו ל-printContact(alice)
  2. קראו ל-printContact(bob)
  3. הדפיסו את תוצאת ההשוואה bob.email == nil

נסו בעצמכם

-- כתבו כאן קוד
-- 1) הגדירו את הטיפוס User עם שדה email אופציונלי
-- 2) צרו את alice (עם email) ואת bob (בלי email)
-- 3) כתבו את printContact עם בדיקה של nil
-- 4) קראו לה עבור שני המשתמשים, ואז הדפיסו את התוצאה של bob.email == nil
quiz iconבחנו את עצמכם

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

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

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