מתודות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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() ללא ארגומנט היא שגיאה שמדווחים עליה לפני שהתוכנית רצה.
אתגר
קלהשלם את המתודות של המחלקה BankAccount בקובץ bank_account.gd. החשבון שומר את הכסף שלו במשתנה balance, שמתחיל ב-0.
deposit(amount)מוסיפה אתamountליתרהwithdraw(amount)מפחיתה אתamountומחזירהtrue. כאשרamountגדול מהיתרה, היא לא משנה דבר ומחזירהfalseget_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())
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין