Un mécanisme d'assertion est désormais disponible en Java (à partir de la version 1.4 du langage). Il est utilisé lors de la phase de développement et de test d'un programme, afin de permettre au programmeur de vérifier sa compréhension du programme.
Par exemple, lors de la discussion du calcul du pgcd, nous avons écrit « comme 81#81, les tests peuvent être éliminés en faisant en sorte que la valeur de x soit supérieure à celle de y ». Ici, « faire en sorte » consiste à ce que y soit le reste de la division par x à l'issue de chaque itération. Par conséquent, x doit être supérieur à y. On indique cette propriété à l'aide de l'instruction assert dans le programme suivant :
static int pgcd(int x, int y) { while (y > 0) { int t = x%y; x = y; y = t; assert x>y : x + " > " + y + " non vérifié !" ; } return x; } public static void main(String[] args) { System.out.println(pgcd(12, 15)); }
Cette instruction a la forme
où cond est une expression booléenne que le programmeur croit vraie, et message une expression quelconque (généralement une chaîne de caractères). À l'exécution, si la condition vaut true, l'exécution de l'instruction assert est terminée ; si elle vaut false, un message d'erreur est affiché, contenant le message spécifié.
Pour bénéficier de ce mécanisme, la commande de compilation doit préciser que le source est conforme à la version 1.4 (ce qui interdit désormais d'utiliser assert comme un nom) :
javac -d ~/java/classes -source 1.4 euclide.java
L'application doit être exécutée avec l'option -ea (pour « enable assert ») :
java -ea exemples.Euclide
Il est fréquent d'utiliser une assertion à la place d'un
commentaire. Par exemple, la précondition portant sur les paramètres de
la fonction de dichotomie (page ) :
static double zéro(double a, double b) { // on suppose que f(a)*f(b) < 0 // ... }
exprimée comme un commentaire, peut être transcrite comme une assertion :
static double zéro(double a, double b) { assert f(a)*f(b) < 0 : "f("+a+")*f("+b+") < 0 non vérifié !"; // ... }