Menu
CoddyTech

הוספת מתודות למבנים

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

מפרק ה־OOP של Lua ידוע לך שטבלאות יכולות להכיל פונקציות, בדיוק כמו כל ערך אחר. צורות יכולות לתאר גם את שדות הפונקציה האלה: כך צורה הופכת לחוזה קטן של נתונים וגם התנהגות.

שדה של מתודה משתמש בתחביר של טיפוס פונקציה שלמדת בפרק הפונקציות. הפרמטר הראשון שלה נקרא בדרך כלל self, כלומר הטבלה שהמתודה שייכת לה, והצורה יכולה אפילו להפנות לעצמה:

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

כדי לממש את הצורה, שמור פונקציה בשדה ותן לה את הפרמטר self הזה:

local greeter: Greeter = {
    name = "Ana",
    greet = function(self: Greeter): string
        return `Hello, I'm {self.name}`
    end,
}

כדי לקרוא לה, צריך להעביר בעצמך את הטבלה בתור self: greeter.greet(greeter). באמצעות self, המתודה קוראת את השדות של הטבלה שעליה היא נקראה.

כתיבת הטבלה פעמיים מרגישה מסורבלת, וכבר ידועה לך התרופה של Lua: הנקודתיים. בשיעור הבא נקשר בין התחביר : לצורות הטיפוסיות האלה.

challenge icon

אתגר

קל

הוסיפו לצורה מלבן פונקציה שמחשבת את השטח שלה.

  1. כתבו type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}.
  2. צרו local rect: Rectangle עם רוחב 4, גובה 6 ו-area = function(self: Rectangle): number שמחזירה את self.width * self.height.
  3. הדפיסו את rect.area(rect), ואז את rect.width.

לחצו על Run Code: הפלט מציג 24 ו-4.

נסו בעצמכם

-- 1) טיפוס Rectangle עם width, height ומתודה לחישוב שטח
-- 2) rect מקומי: Rectangle (width 4, height 6) עם מימוש למתודה לחישוב שטח
-- 3) הדפס את השטח, ואז את הרוחב

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

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