我們先看一個(gè)函數(shù):函數(shù)的功能完成1~10的加法。
int Add1to10(int a, int b)
{
return a +b;
}
但是一般我們還需要加上幾條代碼:
int Add1to10(int a, int b)
{
assert(a >= 1 && a <= 10);
assert(b >= 1 && b < =10);
if ( a < 1 || a > 10 || b < 1 || b > 10)
return -1;
return a +b;
}
加上上面幾條代碼的作用是檢查函數(shù)的輸入?yún)?shù),當(dāng)參數(shù)不正確的時(shí)候不光要在返回值上得到體現(xiàn),而且會(huì)觸發(fā)assert斷言,提醒我們參數(shù)有誤。
斷言式編程體現(xiàn)一個(gè)編程的思想,在我們的程序執(zhí)行偏離預(yù)想的路線時(shí)給出提醒。當(dāng)程序執(zhí)行偏離預(yù)想的路線時(shí)一般會(huì)出現(xiàn)兩種可能:即斷言以上的程序沒(méi)有理解下面程序的調(diào)用條件、或斷言以下的程序需要接受更為寬泛輸入條件。以下分別討論修改方法:
1、如果函數(shù)的輸入?yún)?shù)是我們編程的一個(gè)疏漏,我們認(rèn)為根本就不應(yīng)該出現(xiàn)或產(chǎn)生這樣的值,那我們應(yīng)該修改調(diào)用函數(shù)處的代碼,避免非預(yù)想的值出現(xiàn)。
2、如果無(wú)法避免出現(xiàn)或者產(chǎn)生一個(gè)非法輸入值,那我們要么在函數(shù)調(diào)用處加入判斷,產(chǎn)生符合條件的值時(shí)調(diào)用函數(shù),不符合參數(shù)條件else處理;要么修改函數(shù),使函數(shù)可以接受更為寬泛輸入條件,并調(diào)整斷言內(nèi)容和參數(shù)判斷邏輯。
斷言不僅可以出現(xiàn)在函數(shù)的參數(shù)檢查的場(chǎng)合,也可以出現(xiàn)在其他的上下文調(diào)用的場(chǎng)合。而且它還會(huì)隨著程序的開發(fā)進(jìn)程逐漸的增加、刪除和調(diào)整。它可以驗(yàn)證程序是按照我們預(yù)想的思路在執(zhí)行,當(dāng)出現(xiàn)意外時(shí)及時(shí)的給出提醒,提醒我們修正程序或者自己的思路。
posted on 2008-08-19 10:00
胡滿超 閱讀(808)
評(píng)論(0) 編輯 收藏 引用