D編程中的Contract編程致力于提供一種簡(jiǎn)單易懂的錯(cuò)誤處理方法。 D中的Contract編程通過(guò)三種類(lèi)型的代碼塊實(shí)現(xiàn)-
主體塊包含執(zhí)行的實(shí)際函數(shù)代碼,輸入和輸出塊是可選的,而主體塊是必需的。一個(gè)簡(jiǎn)單的語(yǔ)法如下所示。
return_type function_name(function_params)
in {
//in block
}
out (result) {
//in block
}
body {
//actual function block
}
in塊是簡(jiǎn)單的前提條件,用于驗(yàn)證輸入?yún)?shù)是否可接受以及代碼可以處理的范圍, in塊的一個(gè)好處是可以將所有輸入條件保持在一起并與函數(shù)的實(shí)際主體分開(kāi)。驗(yàn)證密碼最小長(zhǎng)度的簡(jiǎn)單前提如下所示。
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)證返回值在預(yù)期范圍內(nèi),下面顯示了一個(gè)包含輸入和輸出的簡(jiǎn)單示例,該示例將月份,年份轉(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
更多建議: