10 dicembre 2008

Assert in Java : cosa sono e come configurare Eclipse o MyEclipse per poterle utilizzare

Mi è capitato in questi giorni di aver a che fare con CheckStyle, un progetto openSource che ho scaricato da sourceForge ed ho importato come Java Project nel mio Eclipse.
Mi sono ritrovato davanti ad una serie di errori provocati da alcune istruzioni del tipo assert line != null; la cui sintassi mi era del tutto sconosciuta.
Non ero l'unico a cui era sconosciuta... anche il mio Eclipse segnava tutte le occorrenza di questa keyword con un errore.

Cosa sono le assert?
Le assert sono istruzioni che verificano la verità di una condizione booleana, e provocano la terminazione del programma (mediante il lancio di un AssertionError) nel caso in cui tale condizione risulti falsa. Ad esempio l'istruzione:
assert a + b > 0;

provocherà la terminazione del programma qualora la somma dei valori a e b sia uguale o inferiore a zero. In prima istanza, la semantica dell'assert si riconduce ad una forma compatta per espressioni del tipo:
if(!(a+b>0))
throw new AssertException();

Da un punto di vista tecnico, il costrutto delle assert prevede la possibilità di disabilitare in blocco il controllo delle condizioni: come vedremo più avanti, le assert vengono usate essenzialmente in fase di test e debugging: durante la normale esecuzione, è possibile disabilitarle, eliminando in tal modo l'overhead legato alla loro gestione. Ma esiste anche una differenza assai sottile sul piano filosofico, che rende l'assert un qualcosa di completamente diverso da qualunque altro costrutto presente in Java. Contrariamente a quanto avviene con i costrutti standard dei linguaggi imperativi, una assert non rappresenta un ordine, ma un punto di vista: essa indica una condizione che il programmatore ritiene debba essere vera in un determinato momento dell'esecuzione di un programma. La violazione di tale condizione causerà la terminazione del programma, dal momento che si è verificato qualcosa che il programmatore non aveva previsto. Mai e in nessun caso una assert potrà contenere direttive che influenzino la normale esecuzione del programma.

Come configurare Eclipse o MyEclipse per compilare le assert
Nella versione 3.1 o successive di Eclipse (Per MyEclipse dalla versione 6.0), è necessario accedere al menù Window -> Preferences -> Java -> Compiler e settare per quanto riguarda il gruppo JDK Compliance il Compiler Compliance Level su 1.4 o 5.0 in base alla versione desiderata e selezionare le seguenti voci :

Compiler Compliance Level: 1.4 (o 5.0)
Use default compliance settings : non Selezionata
Generated .class files compatibility: 1.4 (o 5.0)
Source compatibility: 1.4 (o 5.0)
Disallow identifiers called 'assert': Error
.....

In questo modo eclipse dopo aver eseguito il rebuild del progetto riconoscerà tali costrutti e vi permetterà di utilizzarli e compilarli.

Nessun commento: