D - Programmazione del contratto
La programmazione dei contratti nella programmazione D si concentra sulla fornitura di un mezzo semplice e comprensibile per la gestione degli errori. La programmazione dei contratti in D è implementata da tre tipi di blocchi di codice:
- blocco del corpo
- in blocco
- fuori blocco
Body Block in D
Il blocco del corpo contiene il codice di funzionalità effettivo di esecuzione. I blocchi in e out sono opzionali mentre il blocco del corpo è obbligatorio. Di seguito viene mostrata una semplice sintassi.
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
In blocco per condizioni preliminari in D
In blocco è per semplici condizioni preliminari che verificano se i parametri di input sono accettabili e nell'intervallo che può essere gestito dal codice. Un vantaggio di un blocco in è che tutte le condizioni di ingresso possono essere tenute insieme e separate dal corpo effettivo della funzione. Di seguito è riportata una semplice condizione preliminare per convalidare la password per la sua lunghezza minima.
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"));
}
Quando il codice sopra viene compilato ed eseguito, legge il file creato nella sezione precedente e produce il seguente risultato:
true
Blocchi in uscita per condizioni post in D
Il blocco out si prende cura dei valori restituiti dalla funzione. Convalida che il valore restituito è compreso nell'intervallo previsto. Di seguito è mostrato un semplice esempio contenente sia dentro che fuori che converte mesi, anno in una forma di età decimale combinata.
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));
}
Quando il codice sopra viene compilato ed eseguito, legge il file creato nella sezione precedente e produce il seguente risultato:
12.8333