_to_string Metodu
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 32 / 65.
Sınıfı _to_string() tanımlamayan bir nesne yazdırıldığında yalnızca sınıfı ve çalıştırmadan çalıştırmaya değişen bir dahili kimlik gösterilir: <RefCounted#-9223372009541466673>. _to_string() tanımlayın ve bunun yerine görünmesi gereken metni döndürün:
# 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 " + suitGodot, nesne metne dönüştürüldüğünde bunu her seferinde çağırır: print(), str(), biçim dizgesindeki %s aracılığıyla ve yazdırılan bir Array veya Dictionary içindeki her nesne için:
var card := Card.new("Queen", "hearts")
print(card) # Queen of hearts
print(str(card)) # Queen of hearts
print("You drew %s" % card) # You drew Queen of hearts
print([card, Card.new("7", "clubs")]) # [Queen of hearts, 7 of clubs]"You drew " + card hâlâ bir hatadır, çünkü + iki dizeyi birleştirir ve card bir nesnedir. Önce dönüştür: "You drew " + str(card).
Bir alt sınıf, _to_string() yöntemini geçersiz kılabilir ve super() ile üst sınıfın metnini kullanabilir:
# wild_card.gd
class_name WildCard
extends Card
func _to_string() -> String:
return "Wild " + super()print(WildCard.new("King", "spades")), Wild King of spades yazdırır.
_to_string() metni döndürür ve kendi başına hiçbir şey yazdırmaz. Nesneyi kullanan kod, metnin yazdırılacağına, daha uzun bir satıra ekleneceğine veya saklanacağına karar verir.
Görev
Kolayİki sınıfa bir _to_string() yöntemi ekleyin:
playing_card.gddosyasındakiPlayingCard,2ile14arasında birrankdeğerine ve birsuitdeğerine sahiptir. Metni; rank,ofve suit değerinden oluşur; örneğin7 of clubs.11,12,13ve14rank değerleri sırasıylaJ,Q,KveAolarak yazılır:Q of hearts.hand.gddosyasındakiHand, kartlarını_cardsiçinde tutar. Metni, kartların metinlerinin,ile birleştirilmesinin önüne eklenenHand (N):ifadesidir; kartı yoksaHand (0): emptyolur.
Verilen kod boş eli yazdırır, kart sayısını ve ardından her kart için bir RANK SUIT satırı okur. Her kartı ele ekler, Drew ifadesini ve kartı yazdırır, son olarak da eli yazdırır. 7 clubs ve 12 hearts kartları için şu çıktıyı verir:
Hand (0): empty
Drew 7 of clubs
Drew Q of hearts
Hand (2): 7 of clubs, Q of heartsKodunuzu playing_card.gd ve hand.gd dosyalarına yazın. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
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)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi