Menu
CoddyTech

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 / players

In 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.

challenge icon

Aufgabe

Einfach

Schreibe die Funktion process_data. Sie nimmt eine Zeichenkette text entgegen und gibt eine Zeichenkette zurück:

  1. Wenn text keine ganze Zahl ist, gib Input must be a number! zurück
  2. Wenn die Zahl 0 ist, gib Cannot divide by zero! zurück
  3. Andernfalls dividiere 100.0 durch 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablaufsteuerung

Übe selbstständig: Online-GDScript-Compiler