Property-Setter
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 11 von 65.
Eine Eigenschaft kann jedes Mal Code ausführen, wenn ihr ein Wert zugewiesen wird. Setze nach der Deklaration einen Doppelpunkt und füge einen eingerückten set(value):-Block hinzu, ihren Setter:
# player.gd
var health: int = 100:
set(value):
health = clampi(value, 0, 100)value ist das, was zugewiesen wird. Innerhalb des Setters speichert die Zuweisung von health den Wert in der Eigenschaft; sie führt den Setter nicht erneut aus. Dieser Setter hält health zwischen 0 und 100, unabhängig davon, was der Rest des Programms zuweist:
var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0Der Setter wird bei jeder Zuweisung ausgeführt, auch innerhalb der Klasse: health -= 10 in einer Methode von Player und health = start_health in _init() laufen beide darüber. Nur der Anfangswert nach = in der Deklaration wird gespeichert, ohne ihn aufzurufen.
Ein Setter kann einen Wert auch ablehnen. Wenn er der Eigenschaft keinen Wert zuweist, bleibt der alte Wert erhalten:
var level: int = 1:
set(value):
if value > level:
level = valueLass den Typ bei value weg: set(value: int): ist ein Fehler. Der Typ der Eigenschaft selbst gibt bereits an, was sie enthält.
Aufgabe
EinfachGib der Eigenschaft health der Klasse Player in player.gd einen Setter, der:
- den gespeicherten Gesundheitswert zwischen
0undmax_healthhält: Ein größerer Wert wird alsmax_healthund ein negativer Wert als0gespeichert Player is down!ausgibt, wenn der neue Gesundheitswert0ist und der alte Gesundheitswert über0lag
Der bereitgestellte Code liest ein, wie viele Befehle folgen, dann einen pro Zeile: damage N (player.health -= N), heal N (player.health += N) oder set N (player.health = N). Nach jedem Befehl gibt er den Gesundheitswert aus. Für damage 30, heal 50, damage 120 und heal 10 gibt er Folgendes aus:
Health: 70
Health: 100
Player is down!
Health: 0
Health: 10Dein Code gehört in player.gd. main.gd enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
var player := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "damage":
player.health -= amount
elif parts[0] == "heal":
player.health += amount
elif parts[0] == "set":
player.health = amount
print("Health: %d" % player.health)
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