Guard Clauses
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 68 von 78.
Wenn eine Funktion mehrere Prüfungen benötigt, verlagert das Verschachteln eines if in ein anderes die eigentliche Arbeit immer weiter in die Tiefe:
func buy(gold: int, price: int) -> String:
if price > 0:
if gold >= price:
return "Bought! %d gold left" % (gold - price)
else:
return "Not enough gold"
else:
return "Invalid price"Eine Guard-Klausel kehrt das um. Sie prüft gleich am Anfang der Funktion einen ungültigen Fall und beendet die Funktion sofort mit return. Der Code nach den Schutzprüfungen wird nur mit gültigen Werten ausgeführt und benötigt keine Verschachtelung:
func buy(gold: int, price: int) -> String:
if price <= 0:
return "Invalid price"
if gold < price:
return "Not enough gold"
return "Bought! %d gold left" % (gold - price)buy(50, 30) gibt Bought! 20 gold left zurück, buy(10, 30) gibt Not enough gold zurück und buy(50, 0) gibt Invalid price zurück.
Die Reihenfolge der Schutzprüfungen ist wichtig: Die Schutzprüfung, die eine Zeile absichert, muss davor stehen. Überprüfe den Text mit is_valid_int(), bevor du die Zahl verwendest, und prüfe auf null, bevor du dividierst:
func share(coins: int, players: int) -> int:
if players <= 0:
return 0
return coins / playersIn einer -> void-Funktion ist ein Guard ein allein stehendes return. Innerhalb einer Schleife funktioniert continue als Guard für ein Element: Es überspringt ein ungültiges Element und die Schleife fährt mit dem nächsten fort.
Aufgabe
EinfachSchreibe die Funktion process_data. Sie nimmt eine Zeichenkette text entgegen und gibt eine Zeichenkette zurück:
- Wenn
textkeine ganze Zahl ist, gibInput must be a number!zurück - Wenn die Zahl
0ist, gibCannot divide by zero!zurück - Andernfalls dividiere
100.0durch die Zahl und gib das Ergebnis mit zwei Nachkommastellen zurück
Zum Beispiel gibt process_data("8") den Wert 12.50 zurück, process_data("-5") gibt -20.00 zurück und process_data("abc") gibt Input must be a number! zurück.
Schreibe die beiden Prüfungen als Guard-Klauseln am Anfang der Funktion.
Probier es selbst
func process_data(text: String):
# Schreibe hier Code
pass
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablaufsteuerung
1Strings im Detail
String-MethodenIn Strings suchenErsetzen und TrimmenAufteilen und ZusammenfügenRückblick – Benutzernamen prüfen4Wörterbücher Teil 2
Verschachtelte WörterbücherArrays aus WörterbüchernWörterbücher zusammenführenWörterbücher kopierenWiederholung – Häufigkeitszähler10Fortgeschrittene Funktionen
Mehrere Werte zurückgebenLambda-Funktionen Teil 1Lambda-Funktionen Teil 2Wiederholung – Sortieren mit LambdaRekursive Funktionen Teil 1Rekursive Funktionen Teil 2Wiederholung – Verschachteltes Array summieren13Inventarverwaltungssystem
ProjektübersichtArtikel hinzufügen2Fortgeschrittene Entscheidungsfindung
Match mit VariablenMatch-GuardsArray-MusterDictionary-MusterMitgliedschaftsprüfungenRückblick – Befehlsparser5Kontaktbuch-Anwendung
Menü anzeigenKontakt hinzufügen8Schülerdatenverwaltung
ProjektübersichtSchüler hinzufügen3Mehrdimensionale Arrays
Grundlagen zu 2D-ArraysAuf Elemente in 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysWiederholung – 2D-ArraysGezackte ArraysGängige Muster für 2D-ArraysWiederholung – Spielbrett6Mengen mit Dictionaries
Was ist eine Menge?Dictionary als MengeHinzufügen und EntfernenVereinigung und SchnittmengeMengendifferenzWiederholung – Duplikate entfernen9Fortgeschrittene Datenaggregation
Werte summierenMinimum und Maximum findenBenutzerdefiniertes SortierenRückblick – Wörterbuch-Sortierer12Einfache Fehlerbehandlung
Was ist Fehlerbehandlung?Eingaben validierenGuard ClausesFehlercodes zurückgebenRückblick – Sichere DivisionÜbe selbstständig: Online-GDScript-Compiler