מילת המפתח self
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 4 מתוך 65.
פונקציה שהוצהרה במחלקה פועלת על אובייקט מסוים: זה שלפני הנקודה בקריאה. בתוך הפונקציה, מילת המפתח self מתייחסת לאובייקט הזה.
# car.gd
class_name Car
extends RefCounted
var color: String = "Red"
var model: String = "Sedan"
func describe() -> void:
print("I am a %s %s" % [self.color, self.model])my_car.describe() מפעילה את describe() כאשר self מוגדר ל־my_car, כך שהפונקציה קוראת את המשתנים של המכונית הזו. אף פעם לא מעבירים את self בעצמכם:
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # אני מכונית סדאן אדומה
taxi.describe() # אני מכונית סדאן צהובהכתיבת self. היא אופציונלית. בתוך פונקציה של מחלקה, color בפני עצמו כבר מציין את ה־color של האובייקט, ולכן print("I am a %s %s" % [color, model]) עושה את אותו הדבר.
צריך להשתמש ב־self כאשר לפרמטר יש שם זהה לשם של משתנה במחלקה. בתוך הפונקציה, השם מתייחס לפרמטר, ו־self. בוחר את המשתנה של האובייקט:
func repaint(color: String) -> void:
self.color = colorבלי self., השורה color = color מעתיקה את הפרמטר אל עצמו, והמכונית שומרת על הצבע הישן שלה.
אתגר
קלהשלם את שתי הפונקציות של המחלקה Car בקובץ car.gd:
set_info(year, make, model)מאחסנת את שלושת הפרמטרים שלה במשתני המכונית בעלי אותם שמותdescribe()מחזירהThis car is a YEAR MAKE MODEL, לדוגמהThis car is a 2020 Toyota Corolla
הקוד שסופק קורא כמה מכוניות מופיעות בהמשך, ואז שורה אחת לכל מכונית (year make model). הוא יוצר כל מכונית, קורא ל־set_info() ומדפיס את describe() עבור כל מכונית. עבור השורה 2020 Toyota Corolla הוא מדפיס:
This car is a 2020 Toyota Corollaהקוד שלך ייכנס ל־car.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
extends Node
func _ready():
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var count := int(OS.read_string_from_stdin())
var cars: Array[Car] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var car := Car.new()
car.set_info(int(parts[0]), parts[1], parts[2])
cars.append(car)
for car in cars:
print(car.describe())
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין