Ten samouczek pokaże, jak wdrożyć obsługę wyjątków w Ruby za pomocą bloków ratowniczych i ratowniczych.
Podstawowe użycie
Większość języków programowania wdraża obsługę wyjątków za pomocą bloku Try i Catch. Jednak, podobnie jak wszystko inne w Ruby, słowa kluczowe są bardziej opisowe.
Możemy wyrazić ogólną składnię, jak pokazano poniżej:
zaczynaćZałączamy blok obsługi wyjątków w instrukcji początkowej i końcowej. W tych stwierdzeniach definiujemy bloki podnoszenia i ratownicze.
W Raise definiujemy wyjątek, który możemy podnieść ręcznie lub sprawić, by interpreter rubinowy go wygeneruje. Domyślnie parametr bloku podnoszenia jest RuntimeerRor
Następnie jest blok ratunkowy. Jak sama nazwa wskazuje, blok ten przychodzi na ratunek, gdy pojawia się wyjątek. Przejmuje kontrolę nad wykonaniem programu.
Ruby porównuje wyjątek podniesiony z bloku podnoszenia w stosunku do parametrów przekazanych do bloku ratowniczego. Jeśli wyjątek jest tego samego typu lub nadklasy, uruchamia blok ratunkowy.
Przykład obsługi wyjątków w Ruby
Możemy zaimplementować prosty przykład ilustrujący, jak działa obsługa wyjątków w Ruby:
def err_meW powyższym przykładzie definiujemy funkcję z blokiem wyjątków.
Ręcznie podnosimy wyjątek, który przerywa przepływ wykonania programu i wchodzi do bloku ratowniczego. Wykonuje to działania w bloku w tej sprawie, instrukcja PUT i wyjścia.
Jeśli dodasz jakikolwiek blok kodu natychmiast po podwyżieniu i przed blokiem ratunkowym, nie wykonują one, ponieważ blok ratunkowy natychmiast obsługuje przepływ programu.
Domyślnie blok ratunkowy używa parametru StandarderRor. Istnieją jednak inne rodzaje błędów w Ruby, w tym.
I więcej.
Aby podnieść i obsługiwać określony typ błędu, możemy przekazać go do bloku podnoszenia jako parametr. Oto przykład:
zaczynaćW powyższym przykładzie podnosimy zerodivisionError. Następnie wskakujemy do bloku ratowniczego, który drukuje określony typ wyjątku i śledzi źródło.
Powstałe wyjście to:
$ Ruby Erm Loting.RBInne bloki wyjątków
Oprócz głównego bloku podnoszenia i ratownictwa, Ruby zapewnia nam również inne bloki, które możemy zaimplementować, aby obsłużyć błędy.
Zawierają:
Blok ponownej
Blok ponownej próby służy do ponownego uruchomienia bloku ratowniczego po podniesieniu wyjątku. Oto przykład:
zaczynaćJeśli uruchomimy powyższy kod, wydrukuje wiadomość wewnątrz bloku ratowniczego. Napotka blok ponownego wypowiedzi, który wskakuje do bloku ratowniczego.
Wspólnym przypadkiem użycia bloków ponownych jest badanie błędów za pomocą brutalnej siły. Przykładem byłoby przeładowanie strony, gdy połączenie nie będzie opóźnione, dopóki błąd nie zostanie rozwiązany.
OSTROŻNOŚĆ: Zachowaj ostrożność podczas korzystania z bloku ponownego, ponieważ jest powszechnym źródłem nieskończonych pętli.
Zapewnij blok
Jeśli zaprogramowałeś w innym języku, takim jak Python, prawdopodobnie znasz w końcu blok. Upewnij się, że blok w Ruby działa podobnie do bloku wreszcie w innych językach programowania.
Upewnij się, że blok zawsze działa na końcu kodu. Niezależnie od tego, czy podniesiony wyjątek został poprawnie obsługiwany, czy też realizacja programu, zawsze działa lub wykonuje.
Oto przykład:
zaczynaćW takim przypadku powyższy kod wydrukuje komunikat wyjątku i wreszcie uruchomi blok upewnienia się.
ZerodivisionError spowodował, że umarłem ⚰️Jeszcze blok
Jeśli nie zostanie podniesiony wyjątek, możemy zaimplementować blok, aby wykonać akcję za pomocą instrukcji ENE ENE.
Na przykład:
zaczynaćOczywiście blok jest umieszczony między ratunkiem i zapewnia blok. W powyższym przykładzie zauważysz, że brakuje mu bloku podnoszenia, co powoduje, że blok z.
Oto przykład wyjścia:
Zaufanie Ja, Pobiegłem z powodzeniem 😀
I zawsze będę biegał 🚀Lekkie obsługi wyjątków
Bloki podnoszenia i ratownictwa są przydatnym sposobem wykonywania akcji, gdy wystąpi błąd. Ponieważ jednak obsługa błędów buduje ślad stosu, który pomaga w debugowaniu, może łatwo stać się problematyczne w twoim programie. W tym miejscu wchodzą bloki połowów i rzutów.
Aby zaimplementować blok rzutów, zaczynasz od zdefiniowania etykiety za pomocą słowa kluczowego Catch. Gdy Ruby napotyka blok rzutów, który odwołuje się do bloku połowowego, zatrzymuje wykonanie i przeskakuje do bloku połowowego.
Użyjmy przykładu, aby zilustrować tę koncepcję. Rozważ niechlujne gniazdowanie pokazane w poniższym kodzie:
catch (: zabójcy_now)Zaczynamy od użycia słowa kluczowego Catch i przekazywania etykiety wewnątrz pary nawiasów. Po uruchomieniu kodu wykona on wszystkie zagnieżdżone pętle i jeśli instrukcje, dopóki nie napotknie instrukcji rzucania odwołującego się do połowu.
To natychmiast zakończy wykonywanie i wyjście z powrotem na poziom instrukcji połowowej.
Oto przykład wyjścia:
Po rzuceniu nic nie ucieknie!'Wniosek
Ten samouczek pokazał, jak wdrożyć obsługę błędów w Ruby za pomocą bloków ratowniczych i ratowniczych.