Odpověď na názor

Odpovídáte na názor ke článku Skrytá úskalí vícenásobné dědičnosti v C++.

  • 10. 5. 2012 10:06

    Ondřej Novák (neregistrovaný)

    [30] A nač řešit odchycení výjimky. Soustředíme se na algoritmus. Pokud vylítne výjimka uvnitř nějakého databázového výpočtu, tak máme možnost catch (...) pro uvedení databáze do konzistetního stavu a throw; pro poslání výjimky vejš. To je tak všechno, co nás ve funkci zájímá. Co si s výjimkou udělá volající je jeho věc. Klidně to může propadnout až na základní úroveň, kde se uživateli zobrazí okénko s popisem chyby, která nastala... to je další výhoda výjimek, totiž pokud má každá výjimka popis ... (a třeba v mé knihovně je to povinnost)... pak se snadno identifikuje problém.

    Naopak je sice hezké, že vidím, že ve funkci jsem na pěti místech program ukončil (i za cenu použití goto!) pro chybu, kterou reportuju výše v návratové hodnotě, ale jakou mám jistotu, že si toho volající všimnul?

    Další nevyhodou je, že každý programátor má vlastní systém chyb. Někdo vrací nulu, druhý jedničku, jeden vrací kód chyby, druhý používá errno, někdo na to má globální stavovou proměnnou (užijte si v MT prostředí!). Chybové kódy nejsou unikátní, mezi knihovnami se musí překládat, přičemž se často některé informace ztratí... napríklad selže zápis na disk, protože na sektoru 5128 zařízení /dev/sdb1 je chyba. No a tahle chyba propadne k uživateli jako obecná chyba -1 při pokusu uložit dokument. Na to UIčko zareaguje hláškou "není místo na disku" nebo "disk je chráněn proti zápisu", případně "nepovedlo se zapsat na disk". Diagnostika problému je v háji.... o zavádějících hláškách nemluvně.