📅  最后修改于: 2020-11-04 05:18:31             🧑  作者: Mango
D编程中的合同编程致力于提供一种简单易懂的错误处理方式。 D中的合同编程由三种类型的代码块实现-
主体块包含执行的实际功能代码。输入和输出块是可选的,而主体块是必需的。一个简单的语法如下所示。
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
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
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