הוספת מתודות למבנים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 42 מתוך 73.
מפרק ה-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 אתה כבר מכיר: נקודתיים. בשיעור הבא נקשר בין תחביר : לבין הצורות המוקלדות האלה.
אתגר
קלצרו כינוי טיפוס בשם Rectangle עם:
widthמטיפוסnumberheightמטיפוסnumberarea: מתודה(self: Rectangle) -> numberשמחזירהwidth * heightperimeter: מתודה(self: Rectangle) -> numberשמחזירה2 * (width + height)
צרו משתנה rect מטיפוס Rectangle עם רוחב 4, גובה 6, ושתי המתודות ממומשות (זכרו את הפרמטר self).
הדפיסו, כל אחד בשורה נפרדת (קראו למתודות בתחביר נקודה, והעבירו את rect בתור self):
- שטח המלבן
- היקף המלבן
- רוחב המלבן
נסו בעצמכם
-- כתבו כאן קוד
-- 1) הגדירו טיפוס Rectangle עם שני שדות מספריים ושתי מתודות
-- 2) צרו rect (width 4, height 6) שמממש את שתי המתודות
-- 3) הדפיסו את השטח, ההיקף והערך של width
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלהתרגלו בעצמכם: קומפיילר Luau אונליין