D編程中的Contract編程致力于提供一種簡單易懂的錯誤處理方法。 D中的Contract編程通過三種類型的代碼塊實現(xiàn)-
主體塊包含執(zhí)行的實際函數(shù)代碼,輸入和輸出塊是可選的,而主體塊是必需的。一個簡單的語法如下所示。
return_type function_name(function_params)
in {
//in block
}
out (result) {
//in block
}
body {
//actual function block
}
in塊是簡單的前提條件,用于驗證輸入?yún)?shù)是否可接受以及代碼可以處理的范圍, in塊的一個好處是可以將所有輸入條件保持在一起并與函數(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"));
}
編譯并執(zhí)行上述代碼后,它將讀取上一部分中創(chuàng)建的文件,并產(chǎn)生以下輸出-
true
out塊負(fù)責(zé)該函數(shù)的返回值,它驗證返回值在預(yù)期范圍內(nèi),下面顯示了一個包含輸入和輸出的簡單示例,該示例將月份,年份轉(zhuǎn)換為組合十進(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));
}
編譯并執(zhí)行上述代碼后,它將讀取上一部分中創(chuàng)建的文件,并產(chǎn)生以下輸出-
12.8333
更多建議: