Menu
CoddyTech

Klauzule ochronne

Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 68 z 78.

Gdy funkcja wymaga kilku sprawdzeń, zagnieżdżanie jednego if w drugim sprawia, że właściwa praca znajduje się coraz głębiej:

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"

Klauzula ochronna odwraca tę sytuację. Sprawdza jeden nieprawidłowy przypadek na początku funkcji i od razu kończy działanie za pomocą return. Kod po klauzulach ochronnych wykonuje się tylko dla prawidłowych wartości i nie wymaga zagnieżdżania:

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) zwraca Bought! 20 gold left, buy(10, 30) zwraca Not enough gold, a buy(50, 0) zwraca Invalid price.

Kolejność warunków ochronnych ma znaczenie: warunek chroniący daną linię musi znajdować się przed nią. Sprawdź tekst za pomocą is_valid_int(), zanim użyjesz liczby, i sprawdź, czy wartość wynosi zero, zanim wykonasz dzielenie:

func share(coins: int, players: int) -> int:
	if players <= 0:
		return 0
	return coins / players

W funkcji -> void instrukcją ochronną jest samodzielne return. Wewnątrz pętli continue działa jak instrukcja ochronna dla jednego elementu: pomija nieprawidłowy element i pętla przechodzi do następnego.

challenge icon

Wyzwanie

Łatwy

Napisz funkcję process_data. Przyjmuje ciąg znaków text i zwraca ciąg znaków:

  1. Jeśli text nie jest liczbą całkowitą, zwróć Input must be a number!
  2. Jeśli liczba wynosi 0, zwróć Cannot divide by zero!
  3. W przeciwnym razie podziel 100.0 przez tę liczbę i zwróć wynik z dwoma miejscami po przecinku

Na przykład process_data("8") zwraca 12.50, process_data("-5") zwraca -20.00, a process_data("abc") zwraca Input must be a number!.

Zapisz te dwa sprawdzenia jako klauzule ochronne na początku funkcji.

Spróbuj swoich sił

func process_data(text: String):
	# Wpisz tutaj kod
	pass
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator GDScript online