合同(Contract)

优质
小牛编辑
126浏览
2023-12-01

D编程中的合同编程专注于提供简单且易于理解的错误处理方法。 D中的合同编程由三种类型的代码块实现 -

  • body block
  • in block
  • out block

D中的身体阻滞

正文块包含实际的执行功能代码。 输入和输出块是可选的,而主体块是必需的。 一个简单的语法如下所示。

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

在D中的预先条件块中

块中的条件是简单的前置条件,用于验证输入参数是否可接受,以及可由代码处理的范围。 块内的好处是所有入口条件可以保持在一起并与函数的实际主体分开。 验证密码最小长度的简单前提如下所示。

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块负责处理函数的返回值。 它验证返回值是否在预期范围内。 下面显示了一个包含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