Tenhle problem prave resi error handlery, ktere se volaji z mista chyby (vicemene) a vytvari novy frame na zasobniku (aniz by likvidovaly puvodni). Coz dovoluje to treba restart primo v miste, kde chyba vznikla (protoze se error handler muze vratit do funkce, ktera vyvolala chybovy stav)
A jak často je ten restart užitečný? Jednou za miliardu let?
Pokud se v rámci ošetřování chyby (jedno jestli analýzou návratové hodnoty nebo výjimky) chci vrátit zpět, tak jednoduše zopakuji operaci znovu. Je to levnější a jistější.
Každý způsob ošetřování chyby má své plusy a mínusy. A vždy je ošetřování chyb hnusné, nepohodlné a narušuje tu původní krásu kódu, která předpokládá, že vše proběhne bez chyby. Polovina pouček, dogmat a ideologií jak psát správně kód se ukáže k ničemu, jakmile se důkladně začnou ošetřovat chyby.
1) Návratový kód je levný, ale blokuje nebo omezuje návratovou hodnotu pro chybové stavy, nikoli pro užitečnou informaci, kterou chceme vrátit z podprogramu. Ošetřování chyb vede k rozkošatělému stromu podmínek kolem volání funkce. Ještě horší nečitelnost programu v tomto případě pak dostáváme, pokud se důsledně nepoužívá goto, ať to stojí co to stojí.
2) Výjimky mají svůj název proto, že jsou "výjimkami z předpokládaného běhu programu", tedy z cesty, kdy vše je sluníčkové a bez chyby. Nejde tedy o "výjimečnou situaci", jak kdosi psal. Výjimky dokáží ošetřit i stavy, které návratové kódy z funkcí nedokáží. Výjimky navíc vyhazuje i samotný procesor, takže to skutečně funguje od lowest level až po highest level.