D - Vertragsprogrammierung

Die Vertragsprogrammierung in der D-Programmierung konzentriert sich auf die Bereitstellung eines einfachen und verständlichen Mittels zur Fehlerbehandlung. Die Vertragsprogrammierung in D wird durch drei Arten von Codeblöcken implementiert:

  • Körperblock
  • im Block
  • aus Block

Körperblock in D.

Der Bodyblock enthält den eigentlichen Funktionscode für die Ausführung. Die In- und Out-Blöcke sind optional, während der Body-Block obligatorisch ist. Eine einfache Syntax ist unten dargestellt.

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

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

In Block für Vorbedingungen in D.

In Block steht für einfache Vorbedingungen, die überprüfen, ob die Eingabeparameter akzeptabel sind und in einem Bereich, der vom Code verarbeitet werden kann. Ein Vorteil eines In-Blocks besteht darin, dass alle Eingangsbedingungen zusammengehalten und vom eigentlichen Funktionskörper getrennt werden können. Eine einfache Voraussetzung für die Überprüfung des Kennworts auf seine Mindestlänge ist unten dargestellt.

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")); 
}

Wenn der obige Code kompiliert und ausgeführt wird, liest er die im vorherigen Abschnitt erstellte Datei und erzeugt das folgende Ergebnis:

true

Out-Blöcke für Post-Bedingungen in D.

Der out-Block kümmert sich um die Rückgabewerte der Funktion. Es wird überprüft, ob der Rückgabewert im erwarteten Bereich liegt. Im Folgenden wird ein einfaches Beispiel gezeigt, das sowohl In als auch Out enthält und Monate, Jahr in eine kombinierte Dezimalalterform konvertiert.

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)); 
}

Wenn der obige Code kompiliert und ausgeführt wird, liest er die im vorherigen Abschnitt erstellte Datei und erzeugt das folgende Ergebnis:

12.8333