Inner Class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 41 dari 65.
Sebuah class dapat mendeklarasikan class lain di dalamnya, dengan kata kunci class, sebuah nama, dan isi yang diindentasi. Class bagian dalam ini adalah tipe pembantu yang menjadi bagian dari class luar:
# inventory.gd
class_name Inventory
extends RefCounted
const MAX_STACK := 5
class Slot:
var item_name: String
var count: int
func _init(new_name: String, new_count: int) -> void:
item_name = new_name
count = mini(new_count, MAX_STACK)
func _to_string() -> String:
return "%s x%d" % [item_name, count]
var slots: Array[Slot] = []
func add(item_name: String, count: int) -> Slot:
var slot := Slot.new(item_name, count)
slots.append(slot)
return slotDi dalam inventory.gd, class di dalamnya adalah Slot. Semua file lainnya mengaksesnya melalui class luar: Inventory.Slot.
# main.gd
var bag := Inventory.new()
bag.add("Potion", 9)
var arrows: Inventory.Slot = bag.add("Arrow", 3)
print(bag.slots) # [Potion x5, Arrow x3]
var gem := Inventory.Slot.new("Gem", 1)Inner class tanpa extends mewarisi RefCounted, dan dapat memiliki variabel, konstruktor, serta method seperti class apa pun. Inner class dapat menggunakan konstanta dan enum milik outer class (MAX_STACK di atas), tetapi tidak dapat menggunakan variabel anggotanya: Slot tidak dapat mengakses slots, karena sebuah slot adalah object yang terpisah. Berikan nilai apa pun yang dibutuhkannya kepada konstruktor.
Gunakan inner class untuk tipe kecil yang hanya masuk akal bersama outer class-nya, seperti slot inventaris atau entri tabel skor. Tipe yang digunakan sendiri oleh bagian lain dalam game sebaiknya memiliki file dan class_name sendiri.
Tantangan
MudahBuat Leaderboard yang entri-entrinya merupakan inner class.
- Deklarasikan inner class
Entrydi dalamLeaderboard, denganplayer_namedanscoreyang ditetapkan oleh konstruktornya, serta_to_string()yang mengembalikanAda: 120. entriesadalah array bertipeEntry, dengan urutan sesuai kemunculan pertama para pemain.submit(player, score)menambahkan entri baru untuk pemain baru. Untuk pemain yang sudah memiliki entri, fungsi ini mempertahankan nilai yang lebih tinggi dari kedua skor.best()mengembalikan entri dengan skor tertinggi. Jika seri, entri yang muncul lebih dulu menjadi yang terpilih.
Kode yang disediakan membaca jumlah skor yang akan diberikan (Ada 120), memasukkannya, lalu mencetak setiap entri dan entri terbaik (setidaknya satu skor selalu diberikan). Untuk Ada 120, Bo 90, Ada 80, Bo 150, Cy 150, kode ini mencetak:
Ada: 120
Bo: 150
Cy: 150
Best: Bo: 150Letakkan kodemu di leaderboard.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 board := Leaderboard.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
board.submit(parts[0], int(parts[1]))
for entry in board.entries:
print(entry)
print("Best: ", board.best())
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