Menu
CoddyTech

Self ומתודות עם נקודתיים

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

הכתיבה של rect.area(rect) עובדת, אבל כבר למדת דרך טובה יותר ב־Lua OOP: נקודתיים. הקריאה 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 עצמו נשאר ללא הצהרת טיפוס. הטיפוס Account מתאר את הטבלה המוגמרת, והטבלה תואמת לו רק לאחר ששתי המתודות מצורפות אליה; local account: Account = {owner = "Maya", balance = 1500} יגרום למצב המחמיר לדווח על המתודות החסרות.

challenge icon

אתגר

קל

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

  1. מתחת לטבלה, הגדירו function account:deposit(amount: number) שמוסיפה את amount ל-self.balance.
  2. הגדירו function account:getBalance(): number שמחזירה את self.balance.
  3. הדפיסו את account:getBalance(), קראו ל-account:deposit(120), ואז הדפיסו שוב את account:getBalance().

לחצו על Run Code: הפלט מציג 300, ואז 420.

נסו בעצמכם

type Account = {
    owner: string,
    balance: number,
    deposit: (self: Account, amount: number) -> (),
    getBalance: (self: Account) -> number,
}

local account = {owner = "Noah", balance = 300}

-- 1) function account:deposit(amount: number)
-- 2) function account:getBalance(): number
-- 3) הדפיסו את היתרה, הפקידו 120 והדפיסו אותה שוב

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

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