Podmínka mi kontext nenaruší - chybu zachytím a vypořádám tam, kde k ní došlo. Try-catch vyjde buď nastejno jakožto ukecanější varianta ifu, nebo mě hodí někam na jiné místo, mimo původní lexikální kontext, a to i v rámci jedné funkce! O šíření nezachycené výjimky vertikálně už nemluvím vůbec. Kontext, v němž chybový stav nastal, je pro jeho efektivní řešení dost důležitý.
Vy se tváříte, jako kdybyste ten kontext urgentně potřeboval. Vy ho nepotřebujete skoro nikdy, taková je pravda.
Programování není nic jiného, než neustálé mohutné zahazování kontextu. To platí jak v běžném toku programu, tak při ošetřování chyb. Zahazujete lokální kontext při opuštění každého bloku programu. Zahazujete kontext při každém vynoření se z podprogramu. Zahazujete kontext na mnoha jiných místech.
Vy jste si vymyslel teorii padlou na hlavu, že výjimka je chybový stav, a že je něco ultra jiného, než co tu bylo už dávno.
Pro efektivní řešení chyby nepotřebujete celý kontext prakticky nikdy. A těch několik málo proměnných, co byste mohl zužitkovat si dáte jako součást výjimky. Howgh.
Znovu: Je to programátor, který píše zdrojový kód. Výjimka a ošetření výjimky je něco, co také řídí programátor. Pokud není programátor idiot, tak výjimka má potřebné informace, tedy plný kontext už nikoho nezajímá.
Výjimky slouží k vypořádávání chybových stavů.
A už jste zase u té demagogie. Výjimky slouží k vypořádání jakýchkoli stavů, které vyžadují ošetření mimo hlavní proud programu. Ten stav nemusí být nutně chybovým.
Tedy ze stavu, který se před nimi řešil jako kterýkoli jiný, udělaly jakýsi privilegovaný stav, chybový, který se ošetřuje odlišně, dokonce nezávisle na kontextu. Zavádějí úplně novou, nezávislou mašinérii ve struktuře programu. Neříkám, že je to celé špatně. Ale říkám, že v té adoraci výjimek bych hodně brzdil.
Výjimky nezávádějí žádný privilegovaný stav. Jsou prostě jednou z cest, kudy může běžet program. Nic více a nic méně. Vaše tendence z výjimek dělat něco, co stojí úplně stranou ostatních konstrukcí programovacího jazyka je až fanatická. Výjimky jsou jednou z normálních konstrukcí jazyka.
Kromě toho dobře zvládnuté výjimky mohou být i levnější a efektivnější než testování návratových hodnot z podprogramů. Jestli si myslíte, že ty bazilióny podmínek k testování návratových hodnot po každém volání podprogramu jsou zadarmo a nezpomalují program, tak se strašně mýlíte. Výjimky umožňují tyto podmínky odstranit a tím program zrychlit, pokud budete dobře programovat.
Není náhodou, že ošetřování chyb výjimkami čím dál častěji používají i kernely operačních systémů. Je to totiž nejefektivnější možné řešení pro rozsáhlé možnosti chyb. Výjimky nemusí vůbec být objekty - viz třeba SEH (Structured Exception Handling) ve Windows (máte tam výjimky i v programovacím jazyce C), nebo třeba výjimky v programovacím jazyce Ada.