الأسلوب _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() النص ولا تطبع شيئًا بنفسها. ويحدد الكود الذي يستخدم الكائن ما إذا كان النص سيُطبع أو سيُضم إلى سطر أطول أو سيُخزَّن.
التحدي
سهلأضف طريقة _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)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت