פרמטרים אופציונליים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 25 מתוך 73.
ב-Lua רגילה תמיד יכולת להשמיט ארגומנטים: הארגומנטים החסרים הפכו בשקט ל-nil, ושכחה לטפל בזה הייתה מקור קלאסי לבאגים. Luau הופכת את האפשרות למפורשת: הוסף ? לסוג של פרמטר כדי לסמן אותו כאופציונלי.
function greet(name: string, title: string?): string
if title then
return `{title} {name}`
end
return `Hello, {name}`
end
print(greet("Ada")) -- שלום, Ada
print(greet("Ada", "Dr.")) -- Dr. Adastring? נקרא "string או nil". הקוראים יכולים להעביר מחרוזת או לדלג על הארגומנט לגמרי; פרמטרים ללא ? הם חובה, והבודק מסמן קריאות שמשמיטות אותם.
בתוך הפונקציה, פרמטר אופציונלי עשוי להיות nil, לכן צריך לבדוק אותו לפני שמשתמשים בו: if title then ... end היא התבנית המקובלת. אם מדלגים על הבדיקה ומשלבים את nil במחרוזת, מתקבלת אותה שגיאת זמן ריצה ש-Lua תמיד הציגה; בודק הטיפוסים מזהיר אותך מראש.
אתגר
קלצרו פונקציה בשם createUserProfile שמקבלת username: string (חובה) ו-displayName: string? (אופציונלי), ומחזירה string:
- כאשר שניהם מסופקים, החזירו:
"Profile: [displayName] (@[username])" - כאשר מסופק רק שם המשתמש, החזירו:
"Profile: @[username]"
צרו פונקציה בשם calculateDiscount שמקבלת price: number (חובה) ו-membershipLevel: string? (אופציונלי), ומחזירה number:
- כאשר מסופקת רמת חברות, החזירו את המחיר לאחר הפחתה של 10% (כפלו ב-
0.9) - אחרת, החזירו את המחיר ללא שינוי
קראו לפונקציות והדפיסו, כל אחת בשורה נפרדת:
createUserProfile("john_doe", "John Doe")createUserProfile("jane_smith")calculateDiscount(100, "premium")calculateDiscount(75)
נסו בעצמכם
-- כתבו כאן קוד
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- לאחר מכן הדפיסו את ארבע התוצאות
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין