Prywatne z konwencji
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 13 z 65.
GDScript nie ma słowa kluczowego private: do każdej właściwości i metody obiektu można uzyskać dostęp z innych skryptów. Konwencja Godot polega na używaniu podkreślenia na początku nazwy. Poniższe _coins i _is_valid() są przeznaczone wyłącznie do użytku w kodzie tej klasy:
# 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 > 0Inne skrypty korzystają z metod publicznych, które sprawdzają każdą zmianę: spend() nie pozwala wydać więcej żetonów, niż znajduje się w portfelu, więc ich liczba nigdy nie spada poniżej zera.
var wallet := Wallet.new()
wallet.add(50)
wallet.add(-20)
print(wallet.spend(80)) # false
print(wallet.get_coins()) # 50Podkreślenie to obietnica, a nie blokada: wallet._coins = -999 wykona się bez żadnego błędu. Dotrzymanie tej obietnicy zależy od osób piszących pozostałe skrypty, więc nie odczytuj ani nie zmieniaj elementów z podkreśleniem poza ich klasą.
Znasz już dwie nazwy z podkreśleniem z samego Godota: _ready() i _init() są wywoływane przez silnik, a nie przez twój własny kod.
Wyzwanie
ŁatwyUzupełnij klasę User w pliku user.gd. Przechowuje ona hasło we właściwości prywatnej _password i tylko jej własny kod ma do niej dostęp.
- Konstruktor przechowuje hasło początkowe
check_password(attempt)zwraca informację, czyattemptpasuje do hasła_is_strong(candidate), prywatna funkcja pomocnicza, zwraca informację, czycandidatema co najmniej6znakówchange_password(old_password, new_password)zmienia hasło i zwracatruetylko wtedy, gdyold_passwordjest poprawne, anew_passwordjest silne. W przeciwnym razie niczego nie zmienia i zwracafalse
Dostarczony kod odczytuje hasło początkowe, liczbę kolejnych poleceń oraz polecenia check PASSWORD i change OLD NEW. Dla hasła godot4 oraz poleceń change godot4 abc, change wrong longenough i check godot4 wypisuje:
Password not changed
Password not changed
Access grantedTwój kod umieść w pliku user.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online