Ano, narazim na tvoje tvrzeni o "assert": "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í)."
Podle mne i v tomto pripade je lepsi misto "assert" pouzivat klasicke if ... throw nebo aspon zalogovat error pres logging (zalezi podle situace). Zadne testovani neodhali vsechny chyby, tj. nektere chyby se projevi az v produkcnim prostredi a tedy nebudu psat testy, ktere jsou na produkcni vypnute. 2011/4/3 "Zdeněk Troníček" <[email protected]>: > Asi Ti moc nerozumím. To myslíš tak, že budeš na produkci testovat, zda > nevoláš metodu se špatnými parametry a pokud ano, tak vyhodíš výjimku? To > mi připadá na stejné úrovni jako chytání ArrayIndexOutOfBoundsException > pro případ, že bychom použili neplatný index pro přístup k poli. > Ne že by to nešlo, ale výjimky slouží primárně k ošetření neočekávaných > (výjimečných) událostí a ne k detekci či řešení chyb programátora. > > Jinak assert je dost vidět ve zdrojácích NetBeans. > > Z. > -- > Zdenek Tronicek > FIT CTU in Prague > > > Ondra Medek napsal(a): >> 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 >> > > -- Ondra Medek
