契約式編程
在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