Enum dalam Class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 44 dari 65.
enum dapat dideklarasikan di dalam class, di samping variabel-variabelnya. Opsi-opsi tersebut kemudian menjadi milik class itu:
# weapon.gd
class_name Weapon
extends RefCounted
enum Kind { SWORD, BOW, STAFF }
var kind: Kind
func _init(weapon_kind: Kind) -> void:
kind = weapon_kind
func is_ranged() -> bool:
return kind == Kind.BOW or kind == Kind.STAFFDi dalam weapon.gd, enum-nya adalah Kind. Setiap file lain menulis nama class terlebih dahulu, Weapon.Kind.BOW, dalam nilai, anotasi tipe, dan pola match:
# blacksmith.gd
class_name Blacksmith
extends RefCounted
static func repair_cost(kind: Weapon.Kind) -> int:
match kind:
Weapon.Kind.SWORD:
return 20
Weapon.Kind.BOW:
return 15
return 30Opsi tetap berupa angka: Weapon.new(Weapon.Kind.BOW).kind mencetak 1. Enum itu sendiri berfungsi seperti dictionary yang memetakan nama ke angka:
print(Weapon.Kind.keys()) # ["SWORD", "BOW", "STAFF"]
print(Weapon.Kind.find_key(1)) # BOW
print(Weapon.Kind["STAFF"]) # 2
print(Weapon.Kind.size()) # 3
for kind in Weapon.Kind.values():
print(Weapon.Kind.find_key(kind), ": ", Blacksmith.repair_cost(kind))Perulangan ini mencetak SWORD: 20, BOW: 15, dan STAFF: 30. GDScript tidak memeriksa apakah suatu angka termasuk salah satu opsi: Weapon.new(7) membuat senjata yang kind-nya bernilai 7. Berikan opsi yang dinamai agar kodemu tetap benar.
Enum yang menjelaskan satu class berada di dalam class tersebut, sehingga pembaca dapat melihat asal Kind dalam Weapon.Kind.BOW.
Tantangan
MudahUrutkan potion dengan enum yang berada di class Potion.
- Di
potion.gd, deklarasikanenum Kind { HEAL, MANA, POISON }dan berikindtipeKind. Potion.from_text(text, strength)adalah fungsi static yang mengubah"MANA"menjadiKind.MANAdan mengembalikan potion baru.describe()mengembalikanHEAL potion: +20 HP,MANA potion: +15 MPatauPOISON potion: -5 HP, menggunakan nama kind dan strength.- Di
belt.gd,summary()mengembalikan satu baris untuk setiap kind, sesuai urutan enum:HEAL: 2 (35 total), dengan jumlah potion dari kind tersebut dan, di dalam tanda kurung, jumlah strength-nya. Kind yang tidak memiliki potion tetap mendapat satu baris.
Kode yang disediakan membaca jumlah potion berikutnya (HEAL 20), menambahkan setiap potion ke belt, mencetak deskripsinya, lalu mencetak ringkasan. Untuk HEAL 20, POISON 5, HEAL 15, kode ini mencetak:
Added HEAL potion: +20 HP
Added POISON potion: -5 HP
Added HEAL potion: +15 HP
HEAL: 2 (35 total)
MANA: 0 (0 total)
POISON: 1 (5 total)Tulis kodemu di potion.gd dan belt.gd. main.gd berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
var belt := Belt.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var potion := Potion.from_text(parts[0], int(parts[1]))
belt.add(potion)
print("Added ", potion.describe())
for line in belt.summary():
print(line)
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