Public ve Private Üyeler
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 26 / 65.
Kapsülleme, bir nesnenin verilerini bu verileri değiştiren yöntemlerle birlikte tutması ve diğer kodların üyelerinden hangilerini kullanabileceğine karar vermesi demektir. Diğer kodların kullanması için tasarlanan üyeler, nesnenin arayüzünü oluşturur.
GDScript'te public veya private anahtar sözcüğü yoktur: her üyeye dışarıdan erişilebilir. Godot stil kılavuzu, özel olanları başında alt çizgiyle işaretler:
# bank_account.gd
class_name BankAccount
extends RefCounted
var owner_name: String
var _balance: int = 0
var _history: Array[String] = []
func _init(holder: String) -> void:
owner_name = holder
func deposit(amount: int) -> void:
_balance += amount
_record("deposit %d" % amount)
func get_balance() -> int:
return _balance
func _record(entry: String) -> void:
_history.append(entry)owner_name, deposit() ve get_balance() herkese açıktır, bu nedenle main.gd bunları kullanır. _balance, _history ve _record() özeldir: bunları yalnızca bank_account.gd içindeki kod kullanır.
# main.gd
var account := BankAccount.new("Ada")
account.deposit(50)
account.deposit(20)
print(account.owner_name) # Ada
print(account.get_balance()) # 70Alt çizgi bir kuraldır, bir kilit değil: account._balance = 1000000, main.gd içinde hiçbir hata vermeden çalışır. Yine de kurala uy. Yalnızca sınıf _balance değerini değiştirdiğinde, yanlış bakiye ancak bank_account.gd içindeki bir yöntemden kaynaklanabilir; bu nedenle kontrol etmen gereken tek dosya odur.
GDScript'te protected düzeyi de yoktur. Bir alt sınıf, özel üyeler de dahil olmak üzere tüm üyeleri devralır; bu nedenle BankAccount sınıfını extends ile genişleten bir SavingsAccount, kendi yöntemlerinde _balance kullanabilir.
Godot'un _init() ve _ready() gibi sanal metotları da alt çizgiyle başlar. Godot bunları senin için çağırır, bu yüzden özel metotlarından birine asla aynı adı verme.
Görev
Kolayhero.gd dosyasındaki Hero sınıfını tamamla. Herkese açık üyeleri hero_name, gain_xp(), get_xp() ve get_level() şeklindedir. Diğerleri özeldir:
_xp(başlangıç değeri0) ve_level(başlangıç değeri1) özel değişkenlerini ekle._leveldeğerini1 + _xp / 100olarak ayarlayan (tam sayı bölmesiyle) özel_update_level()metodunu ekle.gain_xp(amount),amountdeğerini_xpdeğerine ekler,_update_level()metodunu çağırır ve seviye arttığındatrue, aksi takdirdefalsedöndürür.get_xp()veget_level()özel değerleri döndürür.
Sağlanan kod, kahramanın adını, ardından kaç XP miktarının geleceğini, sonrasında da her satırda bir miktar okur. Her miktardan sonra, gain_xp() true döndürdüğünde bir Level up! satırı, ardından kahramanın durumunu yazdırır. Ada ve 40, 70 ve 250 miktarları için şu çıktıyı verir:
Ada: 40 XP, level 1
Level up! Ada is now level 2
Ada: 110 XP, level 2
Level up! Ada is now level 4
Ada: 360 XP, level 4Kodunu hero.gd dosyasına yaz. main.gd, sağlanan 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 hero := Hero.new(OS.read_string_from_stdin())
var count := int(OS.read_string_from_stdin())
for i in count:
var amount := int(OS.read_string_from_stdin())
if hero.gain_xp(amount):
print("Level up! %s is now level %d" % [hero.hero_name, hero.get_level()])
print("%s: %d XP, level %d" % [hero.hero_name, hero.get_xp(), hero.get_level()])
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