Menu
CoddyTech

מילת המפתח 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 מעתיקה את הפרמטר אל עצמו, והמכונית שומרת על הצבע הישן שלה.

challenge icon

אתגר

קל

השלם את שתי הפונקציות של המחלקה 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())
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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