D - Programowanie kontraktów
Programowanie kontraktowe w programowaniu D koncentruje się na zapewnieniu prostego i zrozumiałego sposobu obsługi błędów. Programowanie kontraktowe w D jest realizowane za pomocą trzech typów bloków kodu -
- blok ciała
- w bloku
- się blok
Body Block w D.
Blok treści zawiera rzeczywisty kod funkcjonalności wykonania. Bloki wejściowe i wyjściowe są opcjonalne, natomiast blokada ciała jest obowiązkowa. Poniżej przedstawiono prostą składnię.
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
W bloku dla warunków wstępnych w D
W bloku jest dla prostych warunków wstępnych, które weryfikują, czy parametry wejściowe są akceptowalne i mieszczą się w zakresie, który może być obsługiwany przez kod. Zaletą bloku in jest to, że wszystkie warunki wejścia mogą być przechowywane razem i oddzielone od rzeczywistej treści funkcji. Poniżej przedstawiono prosty warunek wstępny weryfikacji hasła dla jego minimalnej długości.
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"));
}
Kiedy powyższy kod jest kompilowany i wykonywany, odczytuje plik utworzony w poprzedniej sekcji i generuje następujący wynik -
true
Nasze bloki dla warunków pocztowych w D
Blok out dba o wartości zwracane przez funkcję. Sprawdza, czy zwracana wartość mieści się w oczekiwanym zakresie. Poniżej pokazano prosty przykład zawierający zarówno wejście, jak i wyjście, który konwertuje miesiące, rok na połączoną dziesiętną formę wieku.
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));
}
Kiedy powyższy kod jest kompilowany i wykonywany, odczytuje plik utworzony w poprzedniej sekcji i generuje następujący wynik -
12.8333