No vzhledem k tomu, ze "By default, assertions are disabled at runtime.", tak bych rekl, ze ten Java "assert" slouzi spise pro debugovani a testovani. Vsude, kde chceme mit kontroly i na produkci, tak musime pouzit vlastni kod if ... throw. Tedy IMHO assert muze obsahovat i narocny kod (prochazeni pole, alokace pameti).
Podole mne bylo asi zamyslene pouziti "assert" takove, za na produkci jsou vyple. Kdyz se treba narazi na divny problem, tak se muze spustit aplikace s -ea a treba assert zafunguje a problem odhali. Ale java.logging a podobne resi stejnou vec elegatneji. Je vubec nejaky znamy open source Java projekt, ktery by "assert" pouzival? 2011/4/1 "Zdeněk Troníček" <[email protected]>: > Nejde ani tak o viditelnost metody, ale o to, zda je metoda součástí API. > Klíčové slovo assert kontroluje podmínku, o které je programátor > přesvědčen, že platí. Motivací pro používání assert je snaha dozvědět se > co nejdříve o tom, že je něco špatně. Použití má smysl tam, kde sám píšu > metodu i volání (nebo já píšu metodu a kolega z týmu volání). > Naproti tomu výjimka IllegalArgumentException slouží k informování > volájícího, že zavolal metodu s nesprávnými argumenty. Hodí se tam, kde > jde o metodu API, které bude přístupné někomu z vnějšku (tj. mimo systém). > > Z.T. > -- > Zdenek Tronicek > FIT CTU in Prague > > > Ondra Medek napsal(a): >>> Aserce kontroluji, zda modul dostava spravne vstupy a jeho stav je >>> korektni. Je to takova velmi omezena varianta Design by Contract. >>> Nemely by se pouzivat na overovani vstupu od uzivatele, jen na obranu >>> pred programatorskymi chybami. >>> Typicke pouziti: >>> Scitac je napsan jen pro nezaporna cisla. To je popsano v dokumentaci. >>> Na jeho zacatku se assertem overi, ze cisla skutecne nejsou zaporna. >>> Pokud by ho nejaky programator pouzil spatne, brzy se to dozvi. >>> (Otazkou je, zda trebas tady radeji nepouzit InvalidArgumentException, >>> hranice je neostra.) >> >> Java assert se nema pouzivat na kontrolu parametru public metod, viz >> http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#usage-conditions >> Asi protoze ten assert se ma na produkci vypinat. >> >> Misto toho treba Spring ma Assert tridu: >> http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/util/Assert.html >> (A ja si taky kdysi jednu vyrobil: >> http://xmedeko.blogspot.com/2010/12/java-simple-assert-class-for-design-by.html) >> > > -- Ondra Medek
