D - 契约编程
D 编程中的契约编程专注于提供一种简单且易于理解的错误处理方法。 D 中的契约编程由三种类型的代码块实现 −
- body 块
- in 块
- out 块
D 语言的 Body 块
body块包含执行的实际功能代码。 in和out块是可选的,而body块是强制性的。 下面显示了一个简单的语法。
return_type function_name(function_params) in { // in 块 } out (result) { // in 块 } body { // actual function block }
D 语言的 in 块
In 块用于简单的前提条件,验证输入参数是否可接受以及是否在代码可以处理的范围内。 in 块的好处是所有进入条件都可以保留在一起并与函数的实际主体分开。 下面显示了验证密码最小长度的简单先决条件。
import std.stdio; import std.string; bool isValid(string password) in { assert(password.length>=5); } body { // 其他条件 return true; } void main() { writeln(isValid("password")); }
当上面的代码被编译并执行时,它会读取上一节中创建的文件并产生以下结果 −
true
D 语言的 out 块
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