Výjimky zavádějí speciální stav - chybový. Ale co to je? Chci otevřít soubor, který mezi tím někdo smazal - je to chyba, nebo jiný možný stav? Uživatel zadá ve výrazu dělení nulou - výjimka, nebo normální možný stav? Někde v nějakém cyklu se mi index dostane mimo meze - výjimka nebo možný stav? V tomto případě asi přímo chyba v programu.. K čemu ale výjimky mají sloužit? K ladění, nebo k reakci na nějaké stavy, které z nějakého důvodu chci ošetřovat jinak než jiné stavy?
To je zase demagogie! Výjimky nezavádějí žádný další stav. Výjimky jsou pouze jedním z dalších řídících příkazů, které umožňují přenést vykonávání kódu na jiné místo, jako jsou podmínkové příkazy, cykly, skoky, volání podprogramu.
Považujete podmínkový příkaz (if) za definici nového chybového stavu programu? Měl byste při vaší demagogii. Protože dělá to samé, co výjimka. Přeskakuje vykonávání části kódu. Výjimka to jen dokáže v kontextu mezi podprogramy, nic více a nic méně.
Chápu určité výhody výjimek - zvláště při ladění, ale jinak je považuji za syntaktický balast. V případě ladění je to ale jen takový drahý assert, v případě normální reakce je to zvrácené - některé stavy ošetřovat klasicky, jiné úplně jinak - a jako "bonus" dochází ke ztrátě komtextu. Ta koncepce výjimek se mi prostě nelíbí.
To raději přestaňte programovat úplně. Například kontext ztrácíte kdykoli vyskočíte z podprogramu a kdykoli vyskočíte z nějakého bloku programu, který ukončuje platnost lokálních proměnných v něm definovaných.
Pokud by vám vadila řízená ztráta kontextu, pak jediné, co vám pomůže je: Všechny proměnné globální, žádné podprogramy, atd. atd. atd.
Demagog jste vy, což je ale o vás všeobecně známo už delší dobu. 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ý. Naopak - funkce a bloky programu představují faktorizační celky, jejichž kontexty úmyslně oddělujeme. Ale předpokládám, že tady svou omezenost jen předstíráte.
Výjimky slouží k vypořádávání chybových stavů. Jistě by šly použít i jinak, asi bych mohl přes ně předávat návratové hodnoty, iterovat seznamy (někteří matláci to tak skutečně dělají! Nepatříte náhodou mezi ně?) a kdo ví, co ještě. Ale k tomu určeny nejsou. 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.
Pokud jde o výjimky procesoru, tak ty přece slouží k něčemu úplně jinému! Jde o stavy, kdy není možné pokračovat v provádění hlavního programu. Může jít o chyby - třeba dělení nulou, neplatný opkód, nedostatek práv apod., ale taky může jít o jiný typ překážky - např. výpadek stránky, zarážka apod., nebo jde o něco úplně jiného - třeba syscall. Z hlediska hlavního programu jsou výjimky procesoru transparentní - buď se po obsloužení nějak, někdy pokračuje dál, nebo byl program ukončen v rámci obsluhy výjimky. Pokud jde o tu první skupinu výjimek, tak tam jde opravdu o výjimečné stavy, protože jejich výskyt je způsoben chybou hlavního programu. Je to nouzové, výjimečné řešení, protože zvyšuje předvídatelnost chodu samotného procesoru, nikoli programu. Kdyby byl program bezchybný, tak by k nim vůbec nedošlo. Je to řešení ultima ratio, záchranná plachta, do níž se skočí, když už žádné schodiště nejde použít. Implementací do programovacích jazyků se z těchto "výjimek" udělalo pravidlo - zábradlí je přežitek, když někdo uklouzne na schodech, je dole plachta. Protože zábradlí přece narušuje elegantní estetiku schodiště, není kvůli němu ani pořádně vidět a přitom slouží "jenom" jako ochrana před nehodou.
V těch článcích byly konkrétní příklady, podle Kita špatné. Tak postněte konkrétní dobrý příklad, jak se to má používat.