在D編程中的契約編程是專注于提供錯誤處理一個簡單易懂的手段。在D編程契約編程是由三種類型的代碼塊來實現(xiàn):
body 塊
in 塊
out 塊
Body塊包含執(zhí)行的實際功能代碼。 IN和OUT塊是可選的而身體塊是強制性的。一個簡單的語法如下所示。
return_type function_name(function_params) in { // in block } out (result) { // in block } body { // actual function block }
塊是用于簡單的預(yù)條件驗證輸入?yún)?shù)是否是可以接受的,并在可以由代碼處理范圍。在塊中的好處是,所有的進入條件可以保持在一起,并獨立于該函數(shù)的實際主體。一個簡單的先決條件用于驗證密碼,它的最小長度如下所示。
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")); }
當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:
true
該列塊從函數(shù)返回值。它驗證返回值是在預(yù)期范圍。顯示包含在國內(nèi)外享有一個簡單的例子如下,轉(zhuǎn)換個月,一年一個組合的十進制年齡的形式。
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)); }
當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:
12.8333