契約式編程

在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