D - Контрактное программирование
Контрактное программирование в программировании на языке D ориентировано на предоставление простых и понятных средств обработки ошибок. Контрактное программирование в D реализовано тремя типами кодовых блоков:
- блок тела
- в блоке
- из блока
Блок тела в D
Блок тела содержит фактический функциональный код выполнения. Блоки входа и выхода являются необязательными, а блок тела - обязательным. Ниже показан простой синтаксис.
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
В блоке для предварительных условий в D
Блок In предназначен для простых предварительных условий, которые проверяют, приемлемы ли входные параметры и находятся ли они в диапазоне, который может быть обработан кодом. Преимущество блока in заключается в том, что все условия входа могут храниться вместе и отдельно от фактического тела функции. Ниже показано простое предварительное условие для проверки пароля на его минимальную длину.
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"));
}
Когда приведенный выше код компилируется и выполняется, он считывает файл, созданный в предыдущем разделе, и дает следующий результат:
true
Выходные блоки для условий публикации в D
Блок out заботится о значениях, возвращаемых функцией. Он подтверждает, что возвращаемое значение находится в ожидаемом диапазоне. Ниже показан простой пример, содержащий как in, так и out, который преобразует месяцы и год в комбинированную десятичную форму возраста.
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));
}
Когда приведенный выше код компилируется и выполняется, он считывает файл, созданный в предыдущем разделе, и дает следующий результат:
12.8333