Menu
CoddyTech

מתודות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 5 מתוך 65.

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

# score_board.gd
class_name ScoreBoard
extends RefCounted

var points: int = 0

func greet() -> void:
	print("Scoreboard ready")

func add(amount: int) -> void:
	points += amount

func doubled() -> int:
	return points * 2

func add_bonus() -> int:
	add(10)
	return points

קרא למתודה של אובייקט באמצעות נקודה והעבר את הארגומנטים בסוגריים:

var board := ScoreBoard.new()
board.greet() # לוח הניקוד מוכן
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15

בתוך המחלקה, מתודה קוראת למתודה אחרת של אותו אובייקט לפי שמה: add(10) בתוך add_bonus() פירושו self.add(10).

מתודה שמוצהרת עם -> void לא מחזירה דבר, ומתודה שמוצהרת עם -> int חייבת להחזיר int. כל קריאה פועלת על האובייקט שלה: board.add(5) משנה את board.points ולא שום לוח ניקוד אחר.

הקריאה חייבת להתאים להצהרה: קריאה ל־board.add() ללא ארגומנט היא שגיאה שמדווחים עליה לפני שהתוכנית רצה.

challenge icon

אתגר

קל

השלם את המתודות של המחלקה BankAccount בקובץ bank_account.gd. החשבון שומר את הכסף שלו במשתנה balance, שמתחיל ב-0.

  • deposit(amount) מוסיפה את amount ליתרה
  • withdraw(amount) מפחיתה את amount ומחזירה true. כאשר amount גדול מהיתרה, היא לא משנה דבר ומחזירה false
  • get_balance() מחזירה את היתרה

הקוד שסופק קורא כמה פקודות יופיעו, ואז פקודה אחת בכל שורה: deposit AMOUNT או withdraw AMOUNT. הוא מדפיס שורה עבור כל פקודה ואת היתרה הסופית. עבור deposit 50 ו-withdraw 80 הוא מדפיס:

Deposited 50
Not enough money for 80
Current balance: $50

הקוד שלך צריך להיכתב בקובץ bank_account.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

extends Node

func _ready():
	# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
	var account := BankAccount.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var amount := int(parts[1])
		if parts[0] == "deposit":
			account.deposit(amount)
			print("Deposited %d" % amount)
		elif account.withdraw(amount):
			print("Withdrew %d" % amount)
		else:
			print("Not enough money for %d" % amount)
	print("Current balance: $%d" % account.get_balance())
quiz iconבחנו את עצמכם

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

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

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