在D编程中的契约编程是专注于提供错误处理一个简单易懂的手段。在D编程契约编程是由三种类型的代码块来实现:
body 块
in 块
out 块
Body块包含执行的实际功能代码。 IN和OUT块是可选的而身体块是强制性的。一个简单的语法如下所示。
return_type function_name(function_params) |
in |
{ |
// in block |
} |
out (result) |
{ |
// in block |
} |
body |
{ |
// actual function block |
} |
块是用于简单的预条件验证输入参数是否是可以接受的,并在可以由代码处理范围。在块中的好处是,所有的进入条件可以保持在一起,并独立于该函数的实际主体。一个简单的先决条件用于验证密码,它的最小长度如下所示。
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
该列块从函数返回值。它验证返回值是在预期范围。显示包含在国内外享有一个简单的例子如下,转换个月,一年一个组合的十进制年龄的形式。
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