D - 合同式编程



D 编程中的合同式编程专注于提供一种简单易懂的错误处理方法。D 中的合同式编程通过三种类型的代码块实现:

  • 主体块
  • in 块
  • out 块

D 中的主体块

主体块包含实际的执行功能代码。in 和 out 块是可选的,而主体块是必须的。下面显示了一个简单的语法。

return_type function_name(function_params) 
in { 
   // in block 
} 

out (result) { 
   // in block 
}
 
body { 
   // actual function block 
}

D 中用于前置条件的 In 块

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 块

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
广告