Kiedy używać wyjątków


Wyjątki dostarczają wygodnego sposobu przechwytywania błędów "runtime" bez zatrzymywania programu i bez kłopotliwych instrukcji warunkowych. Złożoność mechanizmu obsługi wyjątków w Object Pascalu, czyni go jednak nieefektywnym, stąd powinien być on wykorzystywany rozważnie. Zawsze kiedy jest możliwe zaistnienie wyjątku, zaleca się zabezpieczać bloki kodu przez ujmowanie ich między słowa kluczowe instrukcji try...except lub try...finally. W praktyce narzędzia te są zarezerwowane dla specjalnych sytuacji.

Obsługa wyjątków jest przeznaczona dla błędów, których prawdopodobieństwo zdarzenia się jest niskie bądź trudne do oszacowania, ale których konsekwencje mogą być katastrofalne (jak np. załamanie aplikacji); dla błędów, których warunki wystąpienia są skomplikowane badź trudne do sprawdzenia w instrukcjach if...then; a także kiedy istnieje potrzeba zareagowania na wyjątek zgłoszony przez system operacyjny lub procedury, których kod nie jest kontrolowany. Wyjątki są zwykle używane dla błędów: sprzętu, pamięci, operacji wejścia/wyjścia (I/O) i systemu operacyjnego.

Instrukcje warunkowe są często najlepszym sposobem przechwytywania sytuacji sprzyjających błędom. Na przykład, zabezpieczenie przed błędną próbą otwarcia nie istniejącego pliku, można osiągnąć w następujący sposób:

try
  AssignFile(F, FileName);
  Reset(F);               // zgłasza wyjątek EInOutError jeśli pliku nie ma
except
  on Exception do ...
end;

Ale można uniknąć obciążania mechanizmu obsługi wyjątków następująco:

if FileExists(FileName) then  // zwraca False gdy pliku nie ma
begin                                // nie zgłaszając wyjątku
  AssignFile(F, FileName);
  Reset(F);
end;

Procedura Assert dostarcza innego sposobu testowania wartości logicznych w dowolnym miejscu kodu. Kiedy Assert nie udaje się, program albo zatrzymuje się albo (jeśli używa modułu SysUtils) zgłasza wyjątek EAssertionFailed. Assert powinny być używane tylko do sprawdzania warunków, których zdarzenia się nie spodziewamy (?!). Więcej informacji: online Help dla the procedury standardowej Assert.