契約式程式設計


在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