Supposons que je le code suivant:contrats vs Exceptions
public class MainClass {
public static void main(String[] args) {
System.out.println(sumNumbers(10, 10));
}
//@requires a >= 10;
//@ensures \result < 0;
public static int sumNumbers(int a, int b) {
return a+b;
}
}
je peux faire 2 choses ici:
Utilisez le code des marchés (dans ce cas, ce qui est dans les commentaires). Lorsque sumNumbers est exécuté et un < 10, il lancera immédiatement une exception (bien qu'il ne semble pas être très descriptif):
Exception in thread "main" org.jmlspecs.jmlrac.runtime.JMLInternalNormalPostconditionError: by method MainClass.sumNumbers
at MainClass.sumNumbers(MainClass.java:500)
at MainClass.internal$main(MainClass.java:9)
at MainClass.main(MainClass.java:286)
ou ...
renverrait une exception dans. L'exception peut être aussi descriptive que je le souhaite. Je voudrais également vérifier à la fin de la fonction pour voir à chaque fois que les conditions de publication sont vraies ou non.
qui utiliseriez-vous ici et pourquoi?
meilleure idée: utilisez les deux! –
Si vous le pouvez, oui. Je ne suis pas familier avec les «contrats de code» tels que présentés ci-dessus –
Il ne servirait à rien d'utiliser les deux. L'idée d'avoir un contrat de code indiquant que x> = 0 est que je n'ai pas à le vérifier à nouveau dans le corps de la méthode. Donc, il ne sert à rien d'utiliser les deux. –