D - Programmation contractuelle

La programmation contractuelle en programmation D vise à fournir un moyen simple et compréhensible de gestion des erreurs. La programmation contractuelle en D est implémentée par trois types de blocs de code -

  • bloc de corps
  • en bloc
  • hors bloc

Bloc de corps en D

Le bloc Body contient le code de fonctionnalité réel de l'exécution. Les blocs d'entrée et de sortie sont facultatifs tandis que le bloc de corps est obligatoire. Une syntaxe simple est présentée ci-dessous.

return_type function_name(function_params) 
in { 
   // in block 
} 

out (result) { 
   // in block 
}
 
body { 
   // actual function block 
}

En bloc pour les conditions préalables en D

Dans le bloc est pour les conditions préalables simples qui vérifient si les paramètres d'entrée sont acceptables et dans la plage qui peut être gérée par le code. Un avantage d'un bloc in est que toutes les conditions d'entrée peuvent être conservées ensemble et séparées du corps réel de la fonction. Une condition préalable simple pour valider le mot de passe pour sa longueur minimale est indiquée ci-dessous.

import std.stdio; 
import std.string;
  
bool isValid(string password) 
in { 
   assert(password.length>=5); 
}
 
body { 
   // other conditions 
   return true; 
}
  
void main() { 
   writeln(isValid("password")); 
}

Lorsque le code ci-dessus est compilé et exécuté, il lit le fichier créé dans la section précédente et produit le résultat suivant -

true

Blocs de sortie pour les conditions postales en D

Le bloc out prend en charge les valeurs de retour de la fonction. Il valide la valeur de retour dans la plage attendue. Un exemple simple contenant à la fois des entrées et des sorties est présenté ci-dessous, qui convertit les mois, l'année en une forme d'âge décimale combinée.

import std.stdio;
import std.string;

double getAge(double months,double years) 
in { 
   assert(months >= 0); 
   assert(months <= 12); 
}
 
out (result) { 
   assert(result>=years); 
} 

body { 
   return years + months/12; 
} 
 
void main () { 
   writeln(getAge(10,12)); 
}

Lorsque le code ci-dessus est compilé et exécuté, il lit le fichier créé dans la section précédente et produit le résultat suivant -

12.8333