Menu
CoddyTech

Method _to_string

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 32 dari 65.

Mencetak object yang class-nya tidak mendefinisikan _to_string() hanya menampilkan class dan ID internalnya, yang berubah setiap kali dijalankan: <RefCounted#-9223372009541466673>. Definisikan _to_string() dan kembalikan teks yang seharusnya ditampilkan:

# 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 memanggilnya setiap kali object diubah menjadi teks: oleh print(), oleh str(), oleh %s dalam string format, dan untuk setiap object di dalam Array atau Dictionary yang dicetak:

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 masih menghasilkan error, karena + menggabungkan dua string dan card adalah object. Ubah tipenya terlebih dahulu: "You drew " + str(card).

Subclass dapat menimpa _to_string() dan menggunakan teks milik parent dengan super():

# wild_card.gd
class_name WildCard
extends Card

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

print(WildCard.new("King", "spades")) mencetak Wild King of spades.

_to_string() mengembalikan teks dan tidak mencetak apa pun. Kode yang menggunakan object menentukan apakah teks dicetak, digabungkan menjadi baris yang lebih panjang, atau disimpan.

challenge icon

Tantangan

Mudah

Beri dua class sebuah method _to_string():

  • PlayingCard di playing_card.gd memiliki rank dari 2 hingga 14 dan suit. Teksnya adalah rank, of dan suit, misalnya 7 of clubs. Rank 11, 12, 13 dan 14 ditulis sebagai J, Q, K dan A: Q of hearts.
  • Hand di hand.gd menyimpan kartu-kartunya di _cards. Teksnya adalah Hand (N): diikuti teks kartu yang digabungkan dengan , , atau Hand (0): empty jika tidak ada kartu.

Kode yang disediakan mencetak hand kosong, membaca jumlah kartu, lalu satu baris RANK SUIT untuk setiap kartu. Kode itu menambahkan setiap kartu ke hand, mencetak Drew dan kartu tersebut, lalu mencetak hand. Untuk kartu 7 clubs dan 12 hearts, kode itu mencetak:

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

Tulis kodemu di playing_card.gd dan hand.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

extends Node

func _ready():
	# Kode input/output yang disediakan: biarkan apa adanya
	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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online