70-480 – Wdrażanie narzędzi obsługi wyjątków

70-480

Ustawianie i reagowanie na kody błędów; rzucanie wyjątku; żądanie sprawdzeń „null check”; wdrażanie bloków try-catch-finally.



Przedświąteczny wpis będzie krótki bo i temat nietrudny, a zacznę od tego, że w JavaScript posiadamy dwie możliwości określenia, że zmienna nie jest zdefiniowana:

  • null
  • undefined

Różnica polega na tym, że wartośc null jest obiektem i oznacza po prostu, że obiekt istnieje, ale nie posiada on jeszcze przypisanej wartości. undefined natomiast oznacza, że obiekt jeszcze nigdzie nie istnieje, nie został zadeklarowany i nie została przypisana mu żadna wartość.

Dobre przykłady znajdziecie na stronie: http://saladwithsteve.com/2008/02/javascript-undefined-vs-null.html

try .. catch .. finally

Jest to konstrukcja znana z wielu języków programowania, więc spójrzmy od razu na przykład:

function doSmth() {
    throw new Error('Some error!');
};

function doSmthElse() {
    console.log('Something else :)');
};

try {
    doSmth();
} catch(e) {
    console.log(e.message); // Some error!
} finally {
    doSmthElse(); // Something else :)
}

Zdefiniowane zostały dwie funkcje doSmth() oraz doSmthElse(). Pierwsze rzuca wyjątkiem w momencie wywołania, dlatego umieszczona została w sekcji try .. catch, której zadaniem jest przechwycenie wyjątku. I tak jak try .. catch jest wymagane i jedno słowo kluczowe nie może być używane bez drugiego, to opcja finally jest opcjonalna. Jej użycie powoduje wywołanie kodu niezależnie od tego, czy wystąpił wyjątek w sekcji try .. catch. Wykona się on na samym końcu – albo po poprawnym wywołaniu funkcji znajdującej się w bloku try albo po obsłużeniu wyjątku w bloku catch.

W przypadku powyższego przykładu na konsoli przeglądarki zobaczymy najpierw wiadomość pobraną z rzucanego wyjątku ‘Some error!‘, a następnie wykonanie bloku finally i funkcji doSmthElse ‘Something else :)‘.

Należy nadmienić, że obsługa wyjątków w JavaScript nie powala na kolana, a na dodatek jej wykonywanie odbywa się bardzo powoli. Jeżeli zależy nam na czasie, to z pewnością zastanowimy się dwukrotnie nad użyciem konstrukcji try .. catch.

Rzucanie wyjątków

Ich obsługę już znamy, sposób tworzenia i rzucania w zasadzie również. W funkcji doSmth() rzuciłem wyjątkiem poprzez użycie słowa kluczowego throw oraz utworzenie nowego obiektu Error. Nie ma tutaj żadnego ‘rocket science’. Całość znów wygląda bardzo podobnie w innych językach programowania.

Przeglądarka Internet Explorer pozwala nam ponad to podać w konstruktorze obiektu Error kod błędu. Konstrukcja wygląda następująco:

function login() {
	throw new Error(401, 'Not authorized!');
};

try {
    login();
} catch(e) {
    console.log('Error NO: ' + e.number + ' , message: ' + e.message);
}

Pierwszym argumentem obiektu Error w tym przypadku jest właśnie kod błędu. Na konsoli otrzymamy tekst: Error NO: 401 , message: Not authorized!

Pamiętajcie, że powyższy przykład zadziała poprawnie tylko na przeglądarce Internet Explorer. Jako, że twórcą egzaminu 70-480 jest Microsoft, to należało o tym wspomnieć.