Exceptions: To throw or not to throw?
Zhruba před rokem proběhla na internetu menší debata o tom, zda je v kódu vhodnější používat vyjímky nebo nebo staré dobré chybové návratové kódy. Náhodou jsem ji dnes znovu objevil, tak jsem se rozhodl o ní zmínít.
Problém vyjímek tkví v tom, že ztěžují čtení a analýzu kódu, protože narušují
jeho plynulý tok (přesněji řečeno, zvětšují množství možných výstupních bodů z funkce,
přičemž tyto body nejsou v kódu vůbec vidět). Na druhou stranu ošetřování
chybových kódů zas kód neskutečně prodlužuje a vede k tomu, že programátoři na
ošetřování kašlou. (Viděli jste třeba někdy ošetřenou návratovou hodnotu z funkce
fclose
?
Já krom matfyzáckého cvičení z céčka nikdy.)
Osobně v tomto sporu stojím na straně vyjímek, a to zejména z jednoho velmi pragmatického důvodu: Pokud ignorujete vyjímku, probublá nakonec až kamsi do defaultního handleru a pravděpodobně shodí program – čili je vidět. Pokud ignorujete chybový kód, program se bude tvářit, že je vše v pořádku, i když to není pravda – a můžete snadno skončit třeba s nekonzistentními daty v souboru. Je asi zřejmé, která z možností je lepší.
Tak, a teď odkazy na příspěvky k loňské debatě (krom posledního jsou chronologicky seřazené):
- Exceptions (Joel On Software)
- Exceptions vs. status returns (Ned Batchelder)
- DoSomething() (Joel On Software)
- Exceptions in the rainforrest (Ned Batchelder) – tenhle článek je mimochodem mnohem víc o designu programů než o vyjímkách
- Diskuze k tématu na Joelově diskuzním fóru