Jason. Cała informatyka w jednym miejscu!

Otwieramy kolejny rozdział epickiej przygody posługiwania się przechwytywaniem wyjątków w języku C# :D. Teraz mamy część drugą: zgłaszanie wyjątków w sposób jawny. Zrobimy to za pomocą słowa kluczowego "throw" w języku C#.

"THROW" W JĘZYKU C#. "RZUCAJ" WYJĄTKIEM GDZIE POPADNIE!

I znów gra słów :D. Dokładnie jak wspomniałem przed sekundą, za słowem "throw" kryje się jawne zgłaszanie wyjątku przez nas samych. Nie chodzi o danie do ręki narzędzia, za pomocą którego możemy sobie sabotować program, tylko raczej o rozbudowywanie implementacji. Co mam na myśli konkretnie?

DO CZEGO TO SIĘ MOŻE PRZYDAĆ?

Za przykład postawię historyjkę z mojej pracy dyplomowej. Opracowywałem aplikację z graficznym interfejsem użytkownika. Postawiłem sobie za cel zamianę nieoczekiwanej awarii programu na komunikat z ikonką błędu i treścią na temat zaprogramowanej przeze mnie przyczyny zgłoszenia wyjątku, który został jawnie zgłoszony przeze mnie w kodzie właśnie przy użyciu "throw" (akurat to nie było pisane w języku C#, tylko w Javie :)). Nie chcę wchodzić w szczegóły, żeby się nie chwalić, bo nie ma czym. Chodziło o wykrywanie sprzecznych z ludzkim rozumowaniem czynników działania algorytmu, aby w przypadku jego wykrycia program "nie brnął" dalej z przetwarzaniem danych, tylko już przerwał cały proces, bo on sam przecież nie wywnioskuje, że jak dochodzi do jakiejkolwiek przewidzianej sprzeczności w działaniu, która co ważne nie musi wcale być powodem do zgłoszenia wyjątku, to nie ma najmniejszego sensu fatygować procesora do pełnego wykonania zadania skoro już wiadomo w połowie drogi, że wyjdzie z tego...kaszana :D.

Mam nadzieję, że wyjaśniłem przez tę pouczającą opowieść do czego się to stosuje. Najlepszym wykorzystaniem jest zabezpieczenie aplikacji przed bzdurnym przetwarzaniem poleceń w celu "potraktowania" niepożądanych sytuacji jak coś zagrażającego prawidłowemu działaniu programu, ale w rzeczywistości takie nie jest. Tak może być dla przykładu z algorytmem generującym mapę. Wyjątkiem natychmiastowo wykrywanym przez program może być wyjście poza zakres tablicy, bo dajmy na to że mapa jest umieszczona na siatce, czyli na tablicy dwuwymiarowej. Co może być wtedy dla nas istotne co wymaga zgłoszenia wyjątku, a wcale nim nie jest? Na przykład brak wstawionego wyjścia z poziomu! Będzie to wyjątek krytyczny dla programu? Nie, ale będzie dla nas, patrząc szczególnie od strony przebiegu rozgrywki! Bez wyjścia z poziomu gracz nie będzie mógł przejść do następnej mapy, ale programowi będzie wszystko jedno, bo nie traktuje tego jako powód do zgłoszenia wyjątku (nie doprowadzi do awarii, ale z pewnością popsuje humor wielu graczom)! Powinniście już na bank rozumieć po co się fatygować.

PRZYKŁADY KODÓW ŹRÓDŁOWYCH

Na zwieńczenie tej opowiastki, kilka przykładów z użyciem "throw" w języku C#, naszym głównym bohaterem dzisiejszego tematu. Możecie go wstawić w dowolnym miejscu kodu źródłowego, tak na marginesie.

JEDNOWIERSZOWE ZGŁOSZENIE WYJĄTKU JAWNIE
throw new Exception();

To spowoduje zgłoszenie wyjątku w sposób jawny, potraktowanie go jako nieobsłużonego i...już sami wiecie jaki to przyniesie efekt (czytaliście poprzednią część, mam rację?).

UTWORZENIE OBIEKTU WYJĄTKU "NA UBOCZU" I ZGŁOSZENIE GO PÓŹNIEJ
Exception exception = new Exception();

throw exception;

To jest drugi sposób. Może się przydać kiedy pomiędzy utworzeniem obiektu wyjątku, a jego zgłoszeniem, znajduje się (czy też musi się znaleźć) ciąg innych instrukcji.

Słowo kluczowe "throw" w języku C#

"throw" w języku C# pozwala jawnie zgłosić wyjątek. Użyteczne w sprawach potraktowania niepożądanych czynników algorytmicznych za problem nie do przyjęcia.


Uspokoiliście się trochę, że artykuł O WIELE mniejszy od poprzedniego :D? To nie koniec "wyjątkowych" emocji :P - przed Wami trzecia część już w kolejnym artykule :O!

PODOBNE ARTYKUŁY