úterý 10. února 2009

Assertions, takové malé připomenutí

Když byly v Jave 1.4 představeny Assertions, tak kde kdo asi očekával, že se klíčové slovo assert stane běžnou součástí zdrojových kódů. Nevím jak vy, ale jak pátrám v paměti, tak jsem snad assert nepoužil. Můžete namítnout, že to vůbec nic neznamená, ale co hůř, já jsem použití assert snad ani neviděl ve zdrojácích open source knihoven.

Je to skutečně s podivem, protože assert má svůj význam, minimálně namísto komentářů "sem to nikdy nedojde". Jako vysvětlení toho, že se nám javistům assert nikdy nedostalo pod kůži mám tři důvody.

Marketing

Přišlo mi, že kolem Javy 5, 6, 7 byl docela velký humbuk. Na člověka se valila spousta informací co v dané verzi bude a co nebude a vedly se učené dišputace proč tato vlastnost ano či ne. Sun trochu odfláknul propagaci, myslím že kdyby na nás z každého zdrojáku v tutoriálech Sunu koukal assert, tak tu nemám teď psát.

Vymahatelnost

Velkou nevýhodou použití assert spatřuji v tom, že jej sice máte v kódu, ale pro jeho zapnutí potřebujete nastavit speciální přepínač pro JVM. Jenže pamatujte na to... Daleko lepší by bylo aktivovat assert na úrovni kompilátoru a to ještě tak, že by byl standardně zapnutý. K jeho vypnutí by docházelo na explicitní žádost. Zde je alespoň z mého pohledu slabá obhajoba JVM přepínače.

Unit test kultura

Tuším, že assert konstrukt převzala Java z Céčka, kde se jedná o celkem zaběhnutou konvencí. Alespoň já o assert mluvím především s programátory, kteří na javu přešli z Céčka. Jenže v době zavedení do Javy, byl již poměrně silně zavedený koncept unit testů. Tedy to co se pomocí assert kontrolovalo mimoděk, tak se pomocí unit testů kontrolovalo (testovalo) přímo a tvoří to v Jave jakousi konvenci.