Je n'ai jamais compris à quoi sert assert
, même si j'ai lu de nombreux exemples, ils ne me permettent pas vraiment de savoir pourquoi ou pourquoi je dois l'utiliser.
Donc, au lieu de demander un exemple, je vais en fournir un et me faire savoir si c'est la bonne utilisation de assert
.
// The idea is that the `mode` variable should be 0 or 1, and no other number.
switch(mode) {
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
// assert code?
}
Si cela est correct, veuillez me faire savoir comment l'utiliser dans ce cas. Si ce n'est pas ainsi qu'il est censé être utilisé, veuillez fournir un exemple.
Pas dans ce cas.
Si vous affirmez une valeur, vous déclarez qu'avant d'effectuer une évaluation critique à l'aide de cette valeur, c'est ce que vous affirmez être. Vous pouvez affirmer que la valeur n'est pas nulle, ou qu'elle est inférieure à 2, ou quelque chose avant vous atteignez votre bloc de code critique.
assert (mode >= 0 && mode < 2); // Ensures that `mode` is between 0 and 1.
// Switch statement to follow
Je n'encouragerais pas l'utilisation de cela ici. Votre code ne serait pas bien lu et à moins que vous n'activiez des assertions avec le -ea
flag, votre assertion ne fonctionnerait pas.
Au lieu de cela, ce que vous pouvez faire est de lever une exception quelconque - si ce n'est pas 0 ou 1, alors le mode
est une valeur illégale qui ne peut pas être traitée, conduisant à un comportement exceptionnel/indéfini. Jetez une exception quelconque.
switch(mode) {
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
throw new IllegalArgumentException("Mode is illegal");
}
assert object != null;
object.doSomething();
assert
est utilisé pour vérifier l'exactitude de certaines conditions préalables, invariantes ou postconditionnelles. Dans l'exemple, nous voulons nous assurer que object
n'est pas null
lorsqu'une méthode est appelée dessus.
Une chose à retenir est que assert
ne doit jamais être exécuté dans le code de production. Nous ne l'utilisons que lors des tests. Il existe une option Java pour l'activer ou la désactiver).
Quant à votre exemple spécifique, vous pouvez utiliser:
assert mode == 0;
assert mode == 1;
au tout début du bloc de commutation pour vous assurer que 0
et 1
sont passés.
P.S. La discussion sur quand utiliser assertion vs exception pourrait vous aider à comprendre. L'idée est que
Les exceptions concernent la robustesse de votre application tandis que les assertions concernent l'exactitude de votre application.
Les assertions sont essentiellement utilisées pour vérifier quelque chose qui ne devrait jamais se produire. Certaines assertions utilisent des cas de http://www.javapractices.com/topic/TopicAction.do?Id=102
conditions préalables (dans les méthodes privées uniquement) - les exigences qu'une méthode exige que son appelant remplisse. post-conditions - vérifier les promesses faites par une méthode à ses invariants de classe d'appel - valider le code d'état de l'objet inaccessible lors de l'exécution - parties de votre programme que vous pensez être inaccessibles, mais qui ne peuvent pas être vérifiées en tant que telles au moment de la compilation ( souvent autres clauses et cas par défaut dans les instructions switch)
Donc, l'utilisation de l'assertion dans votre code n'est pas correcte