Self ומתודות עם נקודתיים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 43 מתוך 73.
כתיבה של rect.area(rect) עובדת, אבל למדת דרך טובה יותר עוד בפרק על OOP ב-Lua: הנקודתיים. הקריאה rect:area() זהה לחלוטין: Lua מעבירה אוטומטית את הטבלה שלפני הנקודתיים בתור הארגומנט הראשון, self.
הנקודתיים עוזרות גם במקום שבו מגדירים את הפונקציה. function account:deposit(amount) מכריזה עבורך על פרמטר ראשון מוסתר בשם self:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self משתמע מאליו
end
function account:getBalance(): number
return self.balance
endשימו לב שהמבנה מצהיר על self במפורש, deposit: (self: Account, amount: number) -> (), אף שהנקודתיים מסתירות אותו במימוש. הנקודתיים הן קיצור תחבירי; הפרמטר עדיין קיים, והטיפוס מציין אותו במפורש. פונקציה שלא מחזירה דבר מוגדרת עם ערך החזרה ריק -> ().
הקריאה פועלת לפי אותו כלל שכבר מוכר לכם: account:deposit(250) זהה ל-account.deposit(account, 250). התנהגות זהה בזמן ריצה לזו שבפרק על OOP: Luau רק מוסיפה טיפוסים.
אתגר
קלצרו כינוי טיפוס בשם Account עם:
ownerמטיפוסstringbalanceמטיפוסnumberdeposit:(self: Account, amount: number) -> ()getBalance:(self: Account) -> number
צרו טבלה בשם account עם בעלים "Maya" ויתרה 1500, ואז צרפו את שתי המתודות באמצעות תחביר הגדרה עם נקודתיים (function account:deposit(amount: number) …). deposit מוסיפה את amount ליתרה; getBalance מחזירה את היתרה הנוכחית.
באמצעות קריאות עם נקודתיים:
- הדפיסו את היתרה
- הפקידו
250 - הדפיסו שוב את היתרה
- הדפיסו את הבעלים
נסו בעצמכם
-- כתבו כאן קוד
-- 1) הגדירו את הטיפוס Account (המתודות כוללות את self במפורש בהגדרת הטיפוס)
-- 2) צרו את הטבלה של Account, ואז הוסיפו את deposit/getBalance באמצעות תחביר הנקודתיים
-- 3) הדפיסו את היתרה, הפקידו 250, הדפיסו שוב את היתרה, והדפיסו את הבעלים
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלהתרגלו בעצמכם: קומפיילר Luau אונליין