W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
通常當(dāng)你寫函數(shù)時會對接收的參數(shù)做了隱含的假設(shè)。如果這些假設(shè)成立,程序沒有問題;如果假設(shè)不成立,你的程序可能就會崩潰了。
為了讓你的程序更為健壯,將你的假設(shè)明確,以程序文檔的方式寫下來或?qū)懘a來進(jìn)行檢查。
比如我們觀察calculateCartesian方法。是否存在對當(dāng)前對象進(jìn)行了假設(shè)呢?沒錯,我們假設(shè)極坐標(biāo)系的標(biāo)志量已經(jīng)設(shè)置了并且mag和theta的值是有效的。如果假設(shè)不成立,那么這個函數(shù)的結(jié)果無意義。
一種做法是對函數(shù)添加注釋說明先決條件以警告他人。
void Complex::calculateCartesian ()
// 先決條件:當(dāng)前對象包含有效的極坐標(biāo)值,其極坐標(biāo)標(biāo)志量已設(shè)定。
// 后置條件:當(dāng)前對象包含有效的笛卡爾坐標(biāo)系和極坐標(biāo)系的值,兩個標(biāo)志量皆已設(shè)置。
{
real = mag * cos (theta);
imag = mag * sin (theta);
cartesian = true;
}
同時,我添加了后置條件,即我們認(rèn)為函數(shù)執(zhí)行完畢后為真的事情。
這些注釋對于閱讀你代碼的人很有用,但更好的辦法是通過代碼來檢查先決條件,并輸出合適的錯誤信息:
void Complex::calculateCartesian ()
{
if (polar == false) {
cout << "calculateCartesian failed because the polar representation is invalid" << endl;
exit (1);
}
real = mag * cos (theta);
imag = mag * sin (theta);
cartesian = true;
}
exit函數(shù)會使程序很快的退出執(zhí)行。返回值是一個錯誤碼以告訴系統(tǒng)(或該程序執(zhí)行者)某些錯誤發(fā)生。
這種錯誤檢測方式很是常見,于是C++提供了一個內(nèi)置函數(shù)來檢查先決條件并打印錯誤信息。如果你包含了assert.h頭文件,你可以使用一個以布爾值或條件表達(dá)式為參數(shù)的assert函數(shù)。只要參數(shù)為真,assert函數(shù)就啥也不做。如果參數(shù)為假,assert打印一個錯誤信息并退出,用法如下:
void Complex::calculateCartesian ()
{
assert (polar);
real = mag * cos (theta);
imag = mag * sin (theta);
cartesian = true;
assert (polar && cartesian);
}
第一句assert檢查先決條件(事實(shí)上只是一部分先決條件),第二句assert檢查后置條件。
在我的開發(fā)環(huán)境中,當(dāng)一個斷言失敗時會得到以下信息:
Complex.cpp:63: void Complex::calculatePolar(): Assertion ‘cartesian’ failed.
Abort
信息中會有許多內(nèi)容可以幫助我跟蹤錯誤,包括文件名和斷言失敗的出錯行,斷言語句的內(nèi)容和所在函數(shù)名。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: