Sınıflarda Enum’lar
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 44 / 65.
Bir enum, değişkenlerinin yanında bir sınıfın içinde tanımlanabilir. Seçenekler daha sonra o sınıfa ait olur:
# 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.STAFFweapon.gd içinde enum Kind şeklindedir. Diğer tüm dosyalarda değerlerde, tür açıklamalarında ve match kalıplarında önce sınıf adı yazılır: Weapon.Kind.BOW:
# 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 30Seçenekler hâlâ sayıdır: Weapon.new(Weapon.Kind.BOW).kind, 1 yazdırır. Enum'un kendisi, adlardan sayılara eşleme yapan bir sözlük gibi çalışır:
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))Döngü SWORD: 20, BOW: 15 ve STAFF: 30 değerlerini yazdırır. GDScript, bir sayının seçeneklerden biri olup olmadığını kontrol etmez: Weapon.new(7), kind değeri 7 olan bir silah oluşturur. Adlandırılmış seçenekleri aktarın, kod doğru kalır.
Bir sınıfı tanımlayan enum o sınıfın içinde yer alır; böylece okuyucu Weapon.Kind.BOW ifadesindeki Kind'in nereden geldiğini görür.
Görev
Kolayİksirleri, Potion sınıfında bulunan bir enum ile sırala.
potion.gdiçindeenum Kind { HEAL, MANA, POISON }tanımla vekinddeğişkenineKindtürünü ver.Potion.from_text(text, strength),"MANA"değeriniKind.MANAdeğerine dönüştüren ve yeni bir iksir döndüren statik bir fonksiyondur.describe(), türün adını ve gücünü kullanarakHEAL potion: +20 HP,MANA potion: +15 MPveyaPOISON potion: -5 HPdöndürür.belt.gdiçindesummary(), enum sırasına göre her tür için bir satır döndürür:HEAL: 2 (35 total). Satırda o türden kaç iksir olduğu ve parantez içinde güçlerinin toplamı yer alır. İksiri olmayan türler için de bir satır bulunur.
Verilen kod, kaç iksir geleceğini okur (HEAL 20), her birini kuşağa ekler, açıklamasını ve ardından özeti yazdırır. HEAL 20, POISON 5, HEAL 15 için şu çıktıyı verir:
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)Kodunu potion.gd ve belt.gd dosyalarına yaz. main.gd, verilen 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 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)
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
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt Sistemi8İleri OOP Kavramları
Composition ve Inheritance Karşılaştırmasıİç SınıflarBileşen Olarak DüğümlerRefCounted ve Node KarşılaştırmasıSınıflarda Enum’larKendi başına pratik yap: Online GDScript derleyicisi