Než byl zaveden assert, používal jsem značky pro preprocesor // DEBUG { a //DEBUG } abych spoustu testu mel ve vyvojovem prostredi a nemusel je mit taky v produkcnim. V produkcnim jsem pak vyhazoval vsechno mezi tema dvema "tagy".
Od doby assertu to neni nutne. Dne 3. dubna 2011 15:31 "Zdeněk Troníček" <troni...@fit.cvut.cz> napsal(a): 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" <troni...@fit.cvut.cz>: > >> 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 > > > > -- Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com -- Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com