D編程 契約(Contract)

2021-09-01 10:43 更新

D編程中的Contract編程致力于提供一種簡單易懂的錯(cuò)誤處理方法。 D中的Contract編程通過三種類型的代碼塊實(shí)現(xiàn)-

  • Body block
  • In block
  • Out block

Body block

主體塊包含執(zhí)行的實(shí)際函數(shù)代碼,輸入和輸出塊是可選的,而主體塊是必需的。一個(gè)簡單的語法如下所示。

return_type function_name(function_params) 
in { 
   //in block 
} 

out (result) { 
   //in block 
}
 
body { 
   //actual function block 
}

前置條件

in塊是簡單的前提條件,用于驗(yàn)證輸入?yún)?shù)是否可接受以及代碼可以處理的范圍, in塊的一個(gè)好處是可以將所有輸入條件保持在一起并與函數(shù)的實(shí)際主體分開。驗(yà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è)包含輸入和輸出的簡單示例,該示例將月份,年份轉(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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號