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