Menu
CoddyTech
flag Ar iconالعربيةdown icon

الأسلوب _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 في سلسلة تنسيق، ولكل كائن داخل Array أو Dictionary مطبوع:

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 عبر الإنترنت