Menu
CoddyTech

המתודה _to_string

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

הדפסה של אובייקט שהמחלקה שלו אינה מגדירה את _to_string() מציגה רק את המחלקה שלו ואת מזהה פנימי, שמשתנה מהרצה להרצה: <RefCounted#-9223372009541466673>. הגדירו את _to_string() והחזירו את הטקסט שאמור להופיע במקום:

# card.gd
class_name Card
extends RefCounted

var rank: String
var suit: String

func _init(new_rank: String, new_suit: String) -> void:
	rank = new_rank
	suit = new_suit

func _to_string() -> String:
	return rank + " of " + suit

Godot קורא לה בכל פעם שהאובייקט הופך לטקסט: באמצעות print(), באמצעות str(), באמצעות %s במחרוזת עיצוב, ולכל אובייקט בתוך מערך או מילון שמודפסים:

var card := Card.new("Queen", "hearts")
print(card) # מלכת הלבבות
print(str(card)) # מלכת הלבבות
print("You drew %s" % card) # שלפת את מלכת הלבבות
print([card, Card.new("7", "clubs")]) # [מלכת הלבבות, 7 תלתן]

"You drew " + card עדיין גורם לשגיאה, כי + מחבר שתי מחרוזות ו-card הוא אובייקט. המר אותו תחילה: "You drew " + str(card).

מחלקת משנה יכולה לדרוס את _to_string() ולהשתמש בטקסט של מחלקת האב באמצעות super():

# wild_card.gd
class_name WildCard
extends Card

func _to_string() -> String:
	return "Wild " + super()

print(WildCard.new("King", "spades")) מדפיס Wild King of spades.

_to_string() מחזירה את הטקסט ואינה מדפיסה דבר בעצמה. הקוד שמשתמש באובייקט קובע אם הטקסט יודפס, יצורף לשורה ארוכה יותר או יישמר.

challenge icon

אתגר

קל

הוסיפו לשתי מחלקות מתודה בשם _to_string():

  • PlayingCard בקובץ playing_card.gd מכילה rank בין 2 ל־14 ו־suit. הטקסט שלה הוא הדרגה, of והסוג, למשל 7 of clubs. הדרגות 11, 12, 13 ו־14 נכתבות כך: J, Q, K ו־A: Q of hearts.
  • Hand בקובץ hand.gd שומרת את הקלפים שלה ב־_cards. הטקסט שלה הוא Hand (N): ואחריו הטקסטים של הקלפים, מחוברים באמצעות , , או Hand (0): empty כאשר אין בה קלפים.

הקוד שסופק מדפיס את היד הריקה, קורא את מספר הקלפים ואז שורה אחת בפורמט RANK SUIT לכל קלף. הוא מוסיף כל קלף ליד, מדפיס את Drew ואת הקלף, ולבסוף מדפיס את היד. עבור הקלפים 7 clubs ו־12 hearts הוא מדפיס:

Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of hearts

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

נסו בעצמכם

extends Node

func _ready():
	# קוד הקלט/פלט שסופק: השאירו אותו כפי שהוא
	var hand := Hand.new()
	print(hand)
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var card := PlayingCard.new(int(parts[0]), parts[1])
		hand.add(card)
		print("Drew %s" % card)
	print(hand)
quiz iconבחנו את עצמכם

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

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

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