契约式编程 - D语言教程

在D编程中的契约编程是专注于提供错误处理一个简单易懂的手段。在D编程契约编程是由三种类型的代码块来实现:

  • body 块

  • in 块

  • out 块

body 块

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