Methoden
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 5 von 65.
Eine innerhalb einer Klasse deklarierte Funktion ist eine Methode: etwas, das die Objekte der Klasse tun können. Wie jede Funktion kann eine Methode Parameter annehmen und einen Wert zurückgeben. Außerdem kann sie die Variablen des Objekts lesen und ändern:
# score_board.gd
class_name ScoreBoard
extends RefCounted
var points: int = 0
func greet() -> void:
print("Scoreboard ready")
func add(amount: int) -> void:
points += amount
func doubled() -> int:
return points * 2
func add_bonus() -> int:
add(10)
return pointsRufe eine Methode auf einem Objekt mit einem Punkt auf und übergib die Argumente in Klammern:
var board := ScoreBoard.new()
board.greet() # Scoreboard bereit
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15Innerhalb der Klasse ruft eine Methode eine andere Methode desselben Objekts über deren Namen auf: add(10) in add_bonus() bedeutet self.add(10).
Eine Methode, die mit -> void deklariert ist, gibt nichts zurück, und eine Methode, die mit -> int deklariert ist, muss ein int zurückgeben. Jeder Aufruf wirkt sich auf sein eigenes Objekt aus: board.add(5) ändert board.points und keine andere Anzeigetafel.
Der Aufruf muss mit der Deklaration übereinstimmen: board.add() ohne Argument ist ein Fehler, der gemeldet wird, bevor das Programm ausgeführt wird.
Aufgabe
EinfachVervollständige die Methoden der Klasse BankAccount in bank_account.gd. Das Konto speichert sein Geld in der Variable balance, die mit 0 beginnt.
deposit(amount)addiertamountzum Kontostandwithdraw(amount)ziehtamountab und gibttruezurück. Wennamountgrößer als der Kontostand ist, ändert sich nichts und die Methode gibtfalsezurückget_balance()gibt den Kontostand zurück
Der bereitgestellte Code liest, wie viele Befehle folgen, und anschließend einen Befehl pro Zeile: deposit AMOUNT oder withdraw AMOUNT. Für jeden Befehl wird eine Zeile ausgegeben sowie der endgültige Kontostand. Für deposit 50 und withdraw 80 wird Folgendes ausgegeben:
Deposited 50
Not enough money for 80
Current balance: $50Dein Code gehört in bank_account.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: Lass ihn unverändert
var account := BankAccount.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] == "deposit":
account.deposit(amount)
print("Deposited %d" % amount)
elif account.withdraw(amount):
print("Withdrew %d" % amount)
else:
print("Not enough money for %d" % amount)
print("Current balance: $%d" % account.get_balance())
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