Menu
CoddyTech

_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 " + suit

Godot, 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.

challenge icon

Görev

Kolay

İki sınıfa bir _to_string() yöntemi ekleyin:

  • playing_card.gd dosyasındaki PlayingCard, 2 ile 14 arasında bir rank değerine ve bir suit değerine sahiptir. Metni; rank, of ve suit değerinden oluşur; örneğin 7 of clubs. 11, 12, 13 ve 14 rank değerleri sırasıyla J, Q, K ve A olarak yazılır: Q of hearts.
  • hand.gd dosyasındaki Hand, kartlarını _cards içinde tutar. Metni, kartların metinlerinin , ile birleştirilmesinin önüne eklenen Hand (N): ifadesidir; kartı yoksa Hand (0): empty olur.

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 hearts

Kodunuzu 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)
quiz iconKendini test et

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

Kendi başına pratik yap: Online GDScript derleyicisi