Exceptions: To throw or not to throw?

Vyjímky (kousek mého zápočťáku)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é):

  1. Exceptions (Joel On Software)
  2. Exceptions vs. status returns (Ned Batchelder)
  3. DoSomething() (Joel On Software)
  4. Exceptions in the rainforrest (Ned Batchelder) – tenhle článek je mimochodem mnohem víc o designu programů než o vyjímkách
  5. Diskuze k tématu na Joelově diskuzním fóru