Menu
CoddyTech

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

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

challenge icon

אתגר

קל

הדפס אנשי קשר שייתכן שחסרה להם כתובת אימייל.

  1. כתבו type User = {name: string, email: string?}, ואז local mia: User = {name = "Mia", email = "mia@coddy.tech"} ו-local leo: User = {name = "Leo"}.
  2. כתבו local function printContact(user: User) שמדפיסה `{user.name}: {user.email}`, או `{user.name}: no email` כשאין כתובת אימייל.
  3. קראו לה עבור 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

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