Menu
Coddy logo textTech

ערכי ברירת מחדל לפרמטרים

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

פרמטרים אופציונליים משאירים לך ערך nil לטיפול. לעיתים קרובות, מה שבאמת דרוש לך הוא ערך חלופי: "אם מי שקרא לפונקציה לא ציין, נניח X". ל-Luau אין תחביר לברירת מחדל בחתימה (אין greeting: string = "Hello"); במקום זאת משתמשים באידיומה הקלאסית של Lua, כעת עם טיפוסים:

function greet(name: string, greeting: string?): string
    greeting = greeting or "Hello"
    return `{greeting}, {name}`
end

print(greet("Alice"))            -- Hello, Alice
print(greet("Alice", "Howdy"))   -- אהלן, אליס

הפרמטר מסומן כאופציונלי (string?), והשורה הראשונה בגוף הפונקציה מחליפה את nil בערך ברירת המחדל. זה עובד כי nil הוא ערך שקרי: הביטוי nil or "Hello" מחזיר את הערך "Hello". אחרי השורה הזאת, הבודק יודע ש-greeting כבר לא יכול להיות nil.

הסתייגות אחת, המוכרת לך מ-Lua: or מחליף גם את false! עבור פרמטר מסוג boolean?, הביטוי flag = flag or true ידרוס בשקט ערך false מפורש. במקום זאת, השתמש בבדיקת nil מפורשת:

function ship(weight: number, expedited: boolean?): number
    if expedited == nil then
        expedited = false
    end
    -- ...
end
challenge icon

אתגר

קל

צרי פונקציה בשם calculateTax שמקבלת price: number (נדרש) ו-rate: number?, עם ערך ברירת מחדל 0.05. החזירי את סכום המס (price * rate) בתור number.

צרי פונקציה בשם formatGreeting שמקבלת name: string (נדרש) ו-timeOfDay: string?, עם ערך ברירת מחדל "Hello". החזירי "[timeOfDay], [name]!" בתור string.

צרי פונקציה בשם calculateShipping שמקבלת weight: number, distance: number (שניהם נדרשים) ו-expedited: boolean?, עם ערך ברירת מחדל false: עבור זה השתמשי בבדיקת nil מפורשת! חשבי את (weight * 0.5) + (distance * 0.1), ואם expedited הוא true, הכפילי את התוצאה ב-2. החזירי number.

קראי לפונקציות והדפיסי, כל אחת בשורה נפרדת:

  1. calculateTax(100)
  2. calculateTax(200, 0.08)
  3. formatGreeting("Alice")
  4. formatGreeting("Bob", "Good morning")
  5. calculateShipping(5, 100)
  6. calculateShipping(3, 50, true)

נסו בעצמכם

-- כתבו כאן קוד
-- calculateTax(price: number, rate: number?) -- ערך ברירת המחדל של rate הוא 0.05
-- formatGreeting(name: string, timeOfDay: string?) -- ערך ברירת המחדל הוא "Hello"
-- calculateShipping(weight, distance, expedited: boolean?) -- ערך ברירת המחדל הוא false
-- לאחר מכן הדפיסו את שש התוצאות
quiz iconבחנו את עצמכם

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

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

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