Mot-clé assert en Java
Le mot-clé assert
en Java est utilisé à des fins de débogage. Il permet aux développeurs de tester les hypothèses concernant leur code. Les assertions peuvent être activées ou désactivées lors de l'exécution du programme, ce qui en fait un outil flexible pour détecter et diagnostiquer les erreurs au cours du développement.
Utilisation
Le mot-clé assert
est utilisé pour créer une assertion, qui est une déclaration que vous croyez vraie à un point particulier de votre code. Si l'assertion est fausse, l'exécution Java lancera un AssertionError
. Les assertions sont généralement utilisées pour valider les invariants internes et les hypothèses.
Syntax
assert expression;
assert expression : message;
expression
: Une expression booléenne dont vous attendez qu'elle soit vraie.message
: Un message d'erreur facultatif qui sera affiché si l'assertion échoue.
Exemples
Exemple 1 : Assertion de base
public class AssertExample {
public static void main(String[] args) {
int x = 5;
assert x > 0;
System.out.println("Assertion passed, x is greater than 0");
}
}
Dans cet exemple, l'assertion vérifie que x
est supérieur à 0. Si x
n'est pas supérieur à 0, un message AssertionError
est envoyé.
Exemple 2 : Assertion avec message
public class AssertWithMessage {
public static void main(String[] args) {
int y = -1;
assert y >= 0 : "y should be non-negative";
System.out.println("Assertion passed, y is non-negative");
}
}
Cet exemple inclut un message avec l'assertion. Si y
n'est pas supérieur ou égal à 0, le message "y should be non-negative" s'affiche en même temps que AssertionError
.
Exemple 3 : Activation des assertions
public class EnableAssertions {
public static void main(String[] args) {
int z = 10;
assert z < 5 : "z should be less than 5";
System.out.println("This line will not execute if assertion fails");
}
}
Pour activer les assertions, exécutez le programme avec l'option -ea
(enable assertions) :
java -ea EnableAssertions
Si les assertions ne sont pas activées, elles seront ignorées et le programme s'exécutera normalement.
Conseils et bonnes pratiques
- Utilisation pour les invariants internes: Utilisez les assertions pour vérifier les invariants internes et les hypothèses dans votre code, et non pour la validation des entrées utilisateur ou d'autres vérifications externes.
- Activer pendant le développement: Activez les assertions pendant le développement et les tests pour détecter les bogues à un stade précoce. Ils peuvent être désactivés en production pour des raisons de performance.
- Ne pas utiliser en cas d'effets secondaires: Évitez d'utiliser des assertions pour les effets secondaires, car elles peuvent être désactivées au moment de l'exécution. Le programme ne doit pas s'appuyer sur des assertions pour effectuer des tâches critiques.
- Fournissez des messages significatifs: Lorsque vous utilisez des assertions avec des messages, fournissez des messages significatifs et descriptifs pour faciliter le débogage.
- Évitez les méthodes publiques: Évitez d'utiliser des assertions dans les méthodes publiques pour vérifier les arguments ; utilisez plutôt des exceptions.
Idées reçues
- Assertions dans la production: On pense souvent à tort que les assertions doivent être utilisées dans le code de production. Les assertions sont avant tout un outil de développement et doivent généralement être désactivées en production pour éviter les problèmes de performance.
- Assertions vs. Exceptions: Les assertions ne remplacent pas les exceptions. Utilisez les exceptions pour la gestion des erreurs, en particulier pour les arguments des méthodes publiques et la validation des données saisies par l'utilisateur.
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
this.age = age;
}