Diskuze: c++ vyhadozvanie vynimky architektura
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
napríklad v jave je možnosť bud funkcia má priamo za nazvom funkcie
"throws NazovVynimky" alebo tuto vynimku obalíme do try-catch bloku.
V c++ máme try-catch blok, ale ako spravit "throws NazovVynimky"? Aby ten kto
volá funkciu vedel, že môže dostať výnimku.
Ve starších verzích C++ můžeš (podobně jako v Javě), za funkci
umístit throw(). Tím řekneš, že tato funkce může vyvolat jakou výjimku.
Problém je, že to kompiler nemůže zkontrolovat (funkce je definovaná až
dále). Proto je throw v signatuře funkce od C++11 označené jako deprecated.
Stačí používat doxygen dokumentaci a informace o tom, jakou výjimku funkce
vyhazuje, zapsat tam.
https://www.stack.nl/…ommands.html#…
ďakujem,
doxygen vyzerá celkom fajn, avšak, je to niečo čo nie je súčasťou jazyka
a preto mi to pripadá trochu nesystematické riešenie problému. Ak chápeš
čo myslím. Ide o to ako to vyriešiť napríklad bez toho doxygen-u. A
navyše, zrejme to na rozdiel od javy, automaticky nevyhodí compile-time chybu
ale programátor by si toho musel všimnúť v dokumentácií.
Jenže to v C++ dost dobře nejde. Podívej se na článek, co jsem psal o kompilaci. Kompilátor jde skutečně striktně shora dolů. Má to sice spíše historické důvody, protože dnešní stroje by to utáhly, ale stále se toto pravidlo udržuje. To znamená, že kompiler vždy přijde k definici metody před její implementaci, vždy. V tu chvíli tedy nemůže vědět, co daná funkce vyhazuje, a zda je tedy podmínka splněna. Nemluvě o případě, kdy voláš jinou funkci. Java čte zdrojový soubor jiným způsobem (proto mohou být metody použity ještě před implementací). V C++ tohle prostě dost dobře není možné.
Co se týče systematičnosti, upřímně (právě v Javě), mě zapisování výjimek u každé metody pěkně se**. Většina dnešních IDE ti současně k napovídání vypíšou i dokumentaci, kde už je napsáno, co funkce vyhazuje.
http://i.stack.imgur.com/WrwXR.png (tohle je C#, v C++ to funguje naprosto stejně).
Zobrazeno 5 zpráv z 5.