Bilgi Gizleme
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 28 / 65.
Bilgi gizleme, özel değişkenlerden bir adım daha ileri gider: bir sınıfı kullanan kod, yalnızca sınıfın genel yöntemlerinin ne yaptığına bağlıdır; sınıfın verilerini nasıl sakladığına asla bağlı değildir. Böylece, bu koda dokunmadan depolama yöntemini değiştirebilirsin.
# inventory.gd
class_name Inventory
extends RefCounted
var _counts: Dictionary = {}
func add(item: String, amount: int) -> void:
_counts[item] = _counts.get(item, 0) + amount
func count(item: String) -> int:
return _counts.get(item, 0)
func remove(item: String, amount: int) -> bool:
if count(item) < amount:
return false
_counts[item] -= amount
return truemain.gd, add(), count() ve remove() işlevlerini çağırır ve Dictionary'yi hiç görmez. Inventory daha sonra bunun yerine yuvalardan oluşan bir Array tutarsa yalnızca inventory.gd değişir.
Dizi veya Sözlük döndüren alıcı yöntemlere dikkat edin. GDScript bu değerleri başvuru yoluyla verir: çağıran, nesnenin kendi Dizisini alır; bir kopyasını değil ve sınıfın yöntemlerini kullanmadan onu değiştirebilir:
# quest_log.gd
var _quests: Array[String] = ["Find the key"]
func get_quests() -> Array[String]:
return _quests# main.gd
var journal := QuestLog.new()
var quests := journal.get_quests()
quests.append("Skip the boss")
print(journal.get_quests()) # ["Find the key", "Skip the boss"]Bunun yerine bir kopyasını döndür. duplicate(), aynı öğelere sahip yeni bir Array oluşturur; böylece yapılan değişiklikler nesnenin dışında kalır:
func get_quests() -> Array[String]:
return _quests.duplicate()Bir Dictionary veya başka Array’ler içeren bir Array için duplicate(true) kullan: iç içe geçmiş Array’leri ve Dictionary’leri de kopyalar.
Görev
KolayPlaylist sınıfını playlist.gd dosyasında yazın. Şarkı başlıklarını özel Array _songs içinde tutar ve diğer kod yalnızca şu yöntemleri kullanır:
add(title)başlığı ekler vetruedöndürür. Başlık çalma listesinde zaten varsa hiçbir şeyi değiştirmez vefalsedöndürür.remove(title)başlığı kaldırır vetruedöndürür; başlık listede yoksafalsedöndürür.count()şarkı sayısını döndürür.get_titles()eklenme sırasına göre başlıkların bir kopyasını döndürür.
Sağlanan kod, komut sayısını ve ardından her satırda bir komutu (add Blue Sky veya remove Blue Sky) okur ve sonucu yazdırır. Sonunda get_titles() yönteminden Array'i alır, Intruder ekler ve sırasını tersine çevirir; ardından şarkı sayısını ve başlıkları yazdırır. Çalma listeniz bu değişikliklerden etkilenmemelidir. add Blue Sky, add Rain ve add Blue Sky komutları için şunları yazdırır:
Added: Blue Sky
Added: Rain
Already in the playlist: Blue Sky
Songs: 2
Blue Sky, RainKodunuzu playlist.gd dosyasına yazın. main.gd, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var playlist := Playlist.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ", true, 1)
var title := parts[1]
if parts[0] == "add":
if playlist.add(title):
print("Added: " + title)
else:
print("Already in the playlist: " + title)
elif playlist.remove(title):
print("Removed: " + title)
else:
print("Not found: " + title)
# Geri aldığı listeyi değiştirmeye çalışan kod
var titles := playlist.get_titles()
titles.append("Intruder")
titles.reverse()
print("Songs: %d" % playlist.count())
print(", ".join(playlist.get_titles()))
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 SistemiKendi başına pratik yap: Online GDScript derleyicisi