Historique de la question :
Le mécanisme assert a été ajouté dans Java 1.4 pour diagnostiquer des erreurs logiques et des hypothèses du développeur dans le code. assert permettait à l'exécution d'identifier des incohérences entre les valeurs attendues et réelles sans une exception thrown explicite et n'apparaissait pas dans la version finale de l'application lorsque la prise en charge d'assert était désactivée.
Problème :
L'abus d'assert au lieu de vérifications d'erreurs normales (par exemple, la validation des entrées utilisateur), ainsi qu'une incompréhension de sa désactivation sur un serveur de production, peut conduire à des erreurs oubliées.
Solution :
assert n'est utilisé que pour des invariants logiques qui ne peuvent pas être violés lors du fonctionnement correct du programme, mais s'ils sont violés, l'application se comporte de manière incorrecte.
Exemple de code :
public int divide(int a, int b) { assert b != 0 : "Le diviseur ne doit pas être zéro !"; return a / b; }
Caractéristiques clés :
L'assertion fonctionnera-t-elle par défaut lors de l'exécution d'un programme Java ?
Réponse : Non, par défaut, l'assertion est désactivée. Elle doit être activée explicitement via le drapeau -ea (enable assertions).
L'assert peut-il être utilisé dans le code de production ?
Réponse : Non recommandé, car AssertionError peut être simplement ignoré. L'utilisation d'assert est possible uniquement pour des invariants et dans le code de test.
Quelle est la différence entre assert et lancer une exception ?
Réponse :
Le programmeur utilise assert pour vérifier les données d'entrée d'une application web, permettant à l'utilisateur de déclencher une erreur critique avec des valeurs incorrectes.
Avantages :
Inconvénients :
assert n'est utilisé que pour des invariants internes dans l'algorithme, pour l'utilisateur toutes les vérifications sont effectuées via des exceptions classiques.
Avantages :
Inconvénients :