Nouveauté de Java 1.4 et activées par défaut dans Java 5.0, les assertions viennent combler un vide au sein des techniques internes des débogages et de gestion d'exceptions, et permettent aux développeurs de maîtriser les données qu'ils manipulent, tant leur type que leur valeur.
La plupart des programmes sont conçus en sachant quel sera le type et la valeur de la variable utilisée au sein, par exemple, d'une boucle for() ou d'une fonction mathématique. Cependant, tout comme il est recommandé de ne jamais utiliser des données tierces sans les vérifier, la rigueur voudrait que l'on s'assure de l'adéquation d'une valeur donnée pour une méthode donnée. Une assertion est décrite comme "une déclaration permettant de tester ses exigences vis-à-vis du programme". Elles permettent de placer des cas de figure selon lesquels la variable serait acceptée ou rejetée. Les assertions autorisent ainsi la mise en place d'une programmation "défensive", où l'on pare aux problèmes de variable en annonçant au sein même du programme ce que l'on souhaite utiliser (ou pas). L'exemple canonique est celui d'un appel à la fonction mathématique de calcul de racine carrée. double resultat = Math.sqrt(x); Pour que cette ligne réussisse, il faut que x soit positif. Tout développeur doit être en mesure de savoir d'où provient x, et donc ce qu'il contient, mais deux précautions valant mieux qu'une, les assertions permettent d'ajouter une vérification. Ainsi, une assertion correspond à une expression booléenne, que le développeur déclare devoir être vraie pour qu'une routine se lance. Mise en place Les assertions sont donc déclarées comme suit : public class Bidouille() { La seconde partie de la déclaration permet de passer un message au gestionnaire d'assertions en cas de non-respect de l'assertion. Ainsi, l'exemple le plus courant de l'usage d'assertion est le suivant : if (i % 3 == 0) { où l'assertion remplace un possible commentaire que le développeur
aurait pu placer au même endroit. assert
évite ainsi de faire appel à un gestionnaire d'exception.
Cependant, elles n'ont en aucun cas été conçues pour remplacer
les exceptions, juste pour affiner le jugement des développeurs
sur une variable. Par ailleurs, le simple fait que seul Java
1.5 prend par défaut les assertions en compte (Java 1.4 nécessite
qu'on précise leur usage lors de la compilation, sinon il
ne les reconnaît pas, et les versions précédentes ne les connaissent
pas) fait qu'il est le plus souvent préférable de ne pas se
reposer totalement sur les assertions pour protéger son code. Plus largement, les assertions font partie intégrante de ce que l'on appelle la "conception par contrat" (design by contract), un concept venu du langage Eiffel qui met en avant l'importance de contraintes spécifiées explicitement, et qui doivent rester vraies une fois le programme lancé. |