programmation par contrat
Bonjour,
J'aimerais mettre en place de la programmation par contrat : ajouter des pré et post conditions à une fonction.
J'aimerais pouvoir faire ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
/* declaration de la fonction toto */
function toto(i) {
var a = 5/i;
return a;
}
toto.preCondition = function(i) {
assert(i!=0, "i must not be null");
}
toto.postCondition = function(i, rv) { // rv is the returned value
assert(rv==(5/i));
}
/* utilisation */
toto(1);
// => la pré et post condition sont appelées automatiquement et testent si les assertions sont vraies |
Voici ce que j'arrive à faire pour l'instant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
Function.prototype.contract = function() {
this.preCondition(arguments);
this.call(arguments);
this.postCondition(arguments);
};
var toto = function() {
console.log('toto');
}
toto.preCondition = function() {
console.log('pre');
}
toto.postCondition = function() {
console.log('post');
}
toto.contract();
// => affiche:
// pre
// toto
// post |
Là où je bloque c'est pour garder ce fonctionnement sans passer par l'appel toto.contract() mais directement par toto().
Quelqu'un aurait une idée ?
Merci d'avance
PS: Merci de m'indiquer si ce n'est pas clair.