Ogólnie rzecz biorąc, użycie metody try / catch jest przestarzałe, ponieważ blok catch jest tak drogi z punktu widzenia zasobów. Wykorzystanie try / catch przypomina mi zarządzanie ryzykiem . Zarządzanie ryzykiem ma dwa wymiary:
- Prawdopodobieństwo wystąpienia ryzyka
- Szkody, jakie może mieć
Teraz, jeśli wyjdziesz z domu, fortepian spadnie gdzieś na głowę, podczas gdy jest tak mało prawdopodobne (może 0,001%), ale może cię zabić.
Tak wygląda obsługa wyjątków. Blok próbny nie jest drogi. Ale catch block jest naprawdę drogi, ponieważ musi stworzyć tabelę śledzenia stosu i robić inne rzeczy. Dlatego podejmując decyzję o blokach try / catch, powinieneś rozważyć, ile razy prawdopodobnie trafiłeś w blok catch. Jeśli spośród 10 000 zastosowań trafisz go tylko raz, użyj go. Ale jeśli jest to formularz, a użytkownik prawdopodobnie nie wypełnia go poprawnie 50% razy, powinieneś unikać wykonywania tam bloku try / catch.
W miejscach, w których prawdopodobieństwo wystąpienia wyjątku jest wysokie, zaleca się stosowanie if {} else {}
bloków, aby uniknąć wystąpienia wyjątku. Na przykład, gdzie chcesz podzielić dwie liczby zamiast pisać:
try
{
int result = a/b;
}
catch (DivisionByZeroException ex)
{
// Showing a message here, and logging of course.
}
powinieneś napisać:
if (b == 0)
{
int result = a/b;
}
else
{
// Showing a message to user to change the value of b, etc.
}