Tímto argumentem můžeš obhajovat používání if ... throw kdekoliv. I v
privátních metodách.
Můj názor je, že assert je na tomto místě lepší a to ze dvou důvodů:

1) assert můžeme snadno zapnout a vypnout a to i selektivně pro dané třídy,

2) kód s příkazem assert je kratší a srozumitelnější - je hned jasné, že
jde jen o verifikaci nějakého invariantu a že nejde o logiku aplikace.

Z.
-- 
Zdenek Tronicek
FIT CTU in Prague


Ondra Medek napsal(a):
> 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
>

Odpovedet emailem