位置:首頁 > 高級語言 > 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