Błąd w czasie wykonywania występuje, gdy problem w kodzie ActionScript uniemożliwia wykonywanie treści w zamierzony sposób. Aby zapewnić użytkownikom płynne wykonywanie kodu ActionScript, należy napisać w aplikacji kod, który obsłuży błąd — naprawi go, utworzy rozwiązanie tymczasowe lub przynajmniej powiadomi użytkownika o jego wystąpieniu. Proces ten nazywany jest
obsługą błędów
.
Obsługa błędów jest szerokim pojęciem, które łączy w sobie reagowanie na wiele rodzajów błędów wygenerowanych podczas kompilacji lub w czasie wykonywania. Błędy powstałe w czasie kompilacji są często łatwe do zidentyfikowania — należy je naprawić w celu zakończenia procesu tworzenia pliku SWF.
Błędy czasu wykonania mogą być trudniejsze do wykrycia, ponieważ ich pojawienie się wymaga wykonania w danym momencie błędnego kodu. Jeśli fragment programu użytkownika zawiera kilka rozgałęzień kodu, np. instrukcję
if..then..else
, wówczas każdy możliwy warunek należy przetestować z wszystkimi możliwymi wartościami wejściowymi, których może użyć rzeczywisty użytkownik, aby potwierdzić, że kod jest wolny od błędów.
Błędy czasu wykonania można podzielić na dwie kategorie:
błędy programu
to błędy w kodzie ActionScript, np. określenie nieprawidłowego typu danych dla parametru metody;
błędy logiczne
to błędy w logice (sprawdzanie danych i manipulacja wartością) programu, np. użycie nieprawidłowej formuły do obliczania stóp procentowych w aplikacji bankowej. Ponownie — oba typy błędów można często wykryć i poprawić przed czasem, dokładnie testując aplikację.
W sytuacji idealnej przed wydaniem aplikacji do użytkowników końcowych użytkownik zidentyfikuje i usunie z niej wszystkie błędy. Jednak nie wszystkie błędy można przewidzieć lub im zapobiec. Na przykład: aplikacja ActionScript ładuje z danej strony internetowej informacje, które pozostają poza kontrolą użytkownika. Jeśli z jakiś przyczyn strona internetowa nie będzie dostępna, część aplikacji, która zależy od tych zewnętrznych danych, nie zadziała poprawnie. Najważniejszym aspektem obsługi błędów jest przygotowanie aplikacji na poprawne obsłużenie nieznanych błędów i przypadków. W razie błędu użytkownicy powinni mieć możliwość dalszego korzystania z aplikacji lub przynajmniej powinien pojawić się komunikat o błędzie wyjaśniający, dlaczego aplikacja nie działa.
Błędy czasu wykonania reprezentowane są w języku ActionScript na dwa sposoby:
-
Klasy błędu: wiele błędów ma skojarzoną z nimi klasę błędu. W przypadku pojawienia się błędu w środowisku wykonawczym Flash tworzona jest instancja konkretnej klasy błędu powiązana z tym błędem. Aby właściwie zareagować na błąd, w kodzie użytkownika można użyć informacji zawartej w tym obiekcie błędu.
-
Zdarzenia błędów: niekiedy błąd występuje w sytuacji, w której środowisko Flash w normalnych warunkach wywołałoby zdarzenie. W takich sytuacjach zamiast oczekiwanego zdarzenia wywoływane jest zdarzenie błędu. Z każdym zdarzeniem błędu jest skojarzona klasa, a instancja tej klasy przekazywana jest w środowisku wykonawczym Flash do metod, które przypisane są do zdarzenia błędu.
Aby dowiedzieć się, czy dana metoda może wywoływać błąd, czy zdarzenie błędu, należy zapoznać się z opisem tej metody w dokumentacji
Skorowidz języka ActionScript 3.0 dla platformy Adobe Flash
.
Ważne pojęcia i terminy
Poniższa lista zawiera istotne terminy dotyczące procedur obsługi błędów:
-
Asynchroniczne
-
Polecenie programu, np. wywołanie metody, które nie zapewnia natychmiastowego wyniku; zamiast tego zwraca wynik (lub błąd) w postaci zdarzenia.
-
Przechwycić
-
W momencie pojawienia się wyjątku (błąd czasu wykonania) informacja o nim dociera do kodu, w którym wyjątek należy
przechwycić
. Środowisko wykonawcze Flash nie powiadamia pozostałych składników kodu o przechwyceniu wyjątku.
-
Wersja z debugerem
-
Specjalna wersja środowiska wykonawczego Flash, taka jak odtwarzacz Flash Player z debugerem lub program AIR Debug Launcher (ADL), która zawiera kod powiadamiający użytkownika o błędach występujących w czasie wykonywania. W standardowej wersji programu Flash Player lub środowiska Adobe AIR (wersji posiadanej przez większość użytkowników) błędy, które nie zostaną obsłużone w kodzie ActionScript użytkownika, zostaną ignorowane. W wersjach z debugerem (zawartych w aplikacji Adobe Flash CS4 Professional oraz w środowisku Adobe Flash Builder) pojawienie się nieobsługiwanego błędu powoduje wyświetlenie komunikatu z ostrzeżeniem.
-
Wyjątek
-
Błąd, który wystąpił w trakcie wykonywania aplikacji, i którego środowisko wykonawcze Flash nie jest w stanie samodzielnie obsłużyć.
-
Ponowne generowanie
-
Gdy kod użytkownika przechwyci wyjątek, środowisko wykonawcze Flash nie powiadamia pozostałych obiektów o tym, że wyjątek wystąpił. Jeśli powiadomienie o wyjątku jest istotne dla pozostałych obiektów, należy
ponownie wygenerować
wyjątek w kodzie, aby rozpocząć proces powiadamiania raz jeszcze.
-
Synchroniczne
-
Polecenie programu, np. wywołanie metody, które zapewnia natychmiastowy wynik (lub natychmiast generuje błąd), co oznacza, że reakcji można użyć wewnątrz tego samego bloku kodu.
-
Generowanie
-
Powiadomienie środowiska wykonawczego Flash (a w konsekwencji powiadomienie pozostałych obiektów i kodu ActionScript) o pojawieniu się błędu nazywane jest
generowaniem
błędu.