Property-Getter
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 12 von 65.
Ein get:-Block, der Getter der Eigenschaft, wird jedes Mal ausgeführt, wenn die Eigenschaft gelesen wird. Der zurückgegebene Wert ist der Wert, den der Leser erhält. Verwende ihn für einen Wert, der aus anderen Eigenschaften berechnet wird:
# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
get:
return width * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.area wird wie eine Variable ohne Klammern gelesen, aber bei jedem Lesen neu berechnet, sodass sie immer der aktuellen Breite und Höhe entspricht.
Eine Eigenschaft kann beide Blöcke haben. Hier rechnet fahrenheit nur um: Beim Auslesen wird von celsius umgerechnet, und beim Zuweisen wird zurückgerechnet und das Ergebnis in celsius gespeichert:
# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
get:
return celsius * 9 / 5 + 32
set(value):
celsius = (value - 32) * 5 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0Eine Eigenschaft, die nur get: enthält, ist konventionsgemäß schreibgeschützt. Ihr einen Wert zuzuweisen ist kein Fehler, aber der Getter ignoriert die Zuweisung: Nach r.area = 100 gibt r.area weiterhin 30 zurück.
Aufgabe
EinfachVervollständige die Klasse Temperature in temperature.gd. Sie speichert einen Wert, celsius, und berechnet daraus die anderen Skalen:
fahrenheit: Der Getter gibtcelsius * 9 / 5 + 32zurück, und der Setter speichert(value - 32) * 5 / 9incelsiuskelvin: eine schreibgeschützte Eigenschaft, deren Gettercelsius + 273.15zurückgibt
Der bereitgestellte Code liest ein, wie viele Befehle folgen, dann einen pro Zeile: c VALUE setzt celsius und f VALUE setzt fahrenheit. Nach jedem Befehl gibt er die drei Eigenschaften mit zwei Dezimalstellen aus. Für c 25, f 98.6 und c -40 gibt er Folgendes aus:
25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 KDein Code gehört in temperature.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
var temp := Temperature.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "c":
temp.celsius = float(parts[1])
else:
temp.fahrenheit = float(parts[1])
print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
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