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 / playersW 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.
Wyzwanie
ŁatwyNapisz funkcję process_data. Przyjmuje ciąg znaków text i zwraca ciąg znaków:
- Jeśli
textnie jest liczbą całkowitą, zwróćInput must be a number! - Jeśli liczba wynosi
0, zwróćCannot divide by zero! - W przeciwnym razie podziel
100.0przez 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
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
1Łańcuchy znaków — zagadnienia zaawansowane
Metody łańcuchów znakówWyszukiwanie w łańcuchach znakówZastępowanie i przycinanieDzielenie i łączeniePodsumowanie — sprawdzanie nazwy użytkownika4Słowniki, część 2
Zagnieżdżone słownikiTablice słownikówŁączenie słownikówKopiowanie słownikówPodsumowanie – licznik częstotliwości7Typy wyliczeniowe
Czym jest typ wyliczeniowy?Definiowanie typu wyliczeniowegoWartości typu wyliczeniowegoTypy wyliczeniowe w matchPowtórka – sygnalizacja świetlna10Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Powtórka — sortowanie za pomocą lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Powtórka — sumowanie zagnieżdżonej tablicy13System zarządzania zapasami
Omówienie projektuDodawanie produktu2Zaawansowane podejmowanie decyzji
Dopasowanie ze zmiennymiStrażnicy dopasowaniaWzorce tablicWzorce słownikówSprawdzanie przynależnościPowtórka — parser poleceń5Aplikacja książki kontaktów
Wyświetlanie menuDodawanie kontaktu8Menedżer danych studentów
Przegląd projektuDodaj studenta3Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DTablice postrzępioneTypowe wzorce tablic 2DPodsumowanie — plansza do gry6Zbiory ze słownikami
Czym jest zbiór?Słownik jako zbiórDodawanie i usuwanieSuma i część wspólnaRóżnica zbiorówPowtórka – usuwanie duplikatów9Zaawansowana agregacja danych
Sumowanie wartościZnajdowanie minimum i maksimumSortowanie niestandardowePodsumowanie – Sortownik słowników12Podstawy obsługi błędów
Czym jest obsługa błędów?Walidacja danych wejściowychKlauzule ochronneZwracanie kodów błędówPodsumowanie — bezpieczne dzieleniePoćwicz samodzielnie: Kompilator GDScript online