Geleneksel Olarak Özel
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 65.
GDScript'te private anahtar sözcüğü yoktur: bir nesnenin tüm özelliklerine ve yöntemlerine diğer betiklerden erişilebilir. Godot'nun kuralı, başına alt çizgi koymaktır. Aşağıdaki _coins ve _is_valid() yalnızca sınıfın kendi kodunda kullanılmak üzere tasarlanmıştır:
# wallet.gd
class_name Wallet
extends RefCounted
var _coins: int = 0
func add(amount: int) -> void:
if _is_valid(amount):
_coins += amount
func spend(amount: int) -> bool:
if not _is_valid(amount) or amount > _coins:
return false
_coins -= amount
return true
func get_coins() -> int:
return _coins
func _is_valid(amount: int) -> bool:
return amount > 0Diğer betikler genel yöntemleri kullanır ve bunlar her değişikliği denetler: spend(), cüzdandaki coin sayısından fazla coin harcanmasını reddeder; böylece coin sayısı hiçbir zaman sıfırın altına düşmez.
var wallet := Wallet.new()
wallet.add(50)
wallet.add(-20)
print(wallet.spend(80)) # false
print(wallet.get_coins()) # 50Alt çizgi bir vaattir, kilit değil: wallet._coins = -999 herhangi bir hata olmadan çalışır. Bu vaade uymak diğer betikleri yazanlara bağlıdır; bu nedenle alt çizgiyle başlayan üyeleri sınıflarının dışından okumayın veya değiştirmeyin.
Godot'un kendisinden iki alt çizgili adı zaten biliyorsun: _ready() ve _init(), kendi kodun tarafından değil, motor tarafından çağrılır.
Görev
Kolayuser.gd dosyasındaki User sınıfını tamamla. Parolasını özel bir özellik olan _password içinde tutar ve bu özelliğe yalnızca kendi kodu erişir.
- Kurucu, başlangıç parolasını saklar
check_password(attempt),attemptdeğerinin parolayla eşleşip eşleşmediğini döndürür- Özel bir yardımcı işlev olan
_is_strong(candidate),candidatedeğerinin en az6karakter içerip içermediğini döndürür change_password(old_password, new_password), parolayı değiştirir ve yalnızcaold_passworddoğruysa venew_passwordyeterince güçlüysetruedöndürür. Aksi takdirde hiçbir şeyi değiştirmez vefalsedöndürür
Verilen kod başlangıç parolasını, kaç komutun geleceğini ve check PASSWORD ile change OLD NEW komutlarını okur. Parola godot4 ve komutlar change godot4 abc, change wrong longenough ve check godot4 olduğunda şu çıktıyı verir:
Password not changed
Password not changed
Access grantedKodunu user.gd dosyası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 user := User.new(OS.read_string_from_stdin())
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "check":
print("Access granted" if user.check_password(parts[1]) else "Access denied")
elif user.change_password(parts[1], parts[2]):
print("Password changed")
else:
print("Password not changed")
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