Privat nach Konvention
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 13 von 65.
GDScript hat kein Schlüsselwort private: Auf jede Eigenschaft und Methode eines Objekts kann von anderen Skripten aus zugegriffen werden. Godots Konvention ist ein vorangestellter Unterstrich. _coins und _is_valid() unten sind ausschließlich für den eigenen Code der Klasse gedacht:
# 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 > 0Andere Skripte verwenden die öffentlichen Methoden, und diese überprüfen jede Änderung: spend() weigert sich, mehr Münzen abzuziehen, als die Geldbörse enthält, sodass die Anzahl der Münzen niemals unter null fällt.
var wallet := Wallet.new()
wallet.add(50)
wallet.add(-20)
print(wallet.spend(80)) # false
print(wallet.get_coins()) # 50Der Unterstrich ist ein Versprechen, keine Sperre: wallet._coins = -999 wird ohne Fehler ausgeführt. Das Versprechen einzuhalten, liegt bei denjenigen, die die anderen Skripte schreiben. Lies oder ändere daher keine mit Unterstrich versehenen Member außerhalb ihrer Klasse.
Du kennst bereits zwei Namen mit Unterstrich von Godot selbst: _ready() und _init() werden von der Engine aufgerufen, nicht von deinem eigenen Code.
Aufgabe
EinfachVervollständige die Klasse User in user.gd. Sie speichert ihr Passwort in einer privaten Eigenschaft, _password, auf die nur ihr eigener Code zugreift.
- Der Konstruktor speichert das Startpasswort
check_password(attempt)gibt zurück, obattemptmit dem Passwort übereinstimmt_is_strong(candidate), eine private Hilfsfunktion, gibt zurück, obcandidatemindestens6Zeichen hatchange_password(old_password, new_password)ändert das Passwort und gibt nur danntruezurück, wennold_passwordkorrekt undnew_passwordsicher ist. Andernfalls ändert sie nichts und gibtfalsezurück
Der vorgegebene Code liest das Startpasswort, die Anzahl der folgenden Befehle und die Befehle check PASSWORD und change OLD NEW ein. Für das Passwort godot4 und die Befehle change godot4 abc, change wrong longenough und check godot4 gibt er Folgendes aus:
Password not changed
Password not changed
Access grantedDein Code gehört in user.gd. main.gd enthält den vorgegebenen Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler