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 " + suitGodot 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.
Tantangan
MudahBeri dua class sebuah method _to_string():
PlayingCarddiplaying_card.gdmemilikirankdari2hingga14dansuit. Teksnya adalah rank,ofdan suit, misalnya7 of clubs. Rank11,12,13dan14ditulis sebagaiJ,Q,KdanA:Q of hearts.Handdihand.gdmenyimpan kartu-kartunya di_cards. Teksnya adalahHand (N):diikuti teks kartu yang digabungkan dengan,, atauHand (0): emptyjika 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 heartsTulis 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)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online