C語(yǔ)言 函數(shù)的設(shè)計(jì)原則
因?yàn)镃語(yǔ)言的函數(shù)實(shí)現(xiàn)的是模塊的功能,所以模塊設(shè)計(jì)原則也適用于函數(shù)的設(shè)計(jì)。設(shè)計(jì)函數(shù)時(shí),最主要注意以下幾點(diǎn):
(1)函數(shù)功能獨(dú)立
每一個(gè)函數(shù)應(yīng)該只實(shí)現(xiàn)一個(gè)特定的獨(dú)立功能,例如求階乘函數(shù)只實(shí)現(xiàn)階乘功能,不能在此函數(shù)中實(shí)現(xiàn)其他功能。每一個(gè)函數(shù)與其他函數(shù)的關(guān)系除了調(diào)用關(guān)系外,不能再有其他關(guān)系,這樣才能夠在修改 函數(shù)時(shí),不對(duì)其他函數(shù)造成影響。除了形參提供給外部的調(diào)用接口外,盡量不要使用全局變量等,以免受到外部的數(shù)據(jù)約束。
(2)函數(shù)的規(guī)模應(yīng)大小適中
函數(shù)不能太大也不能太小。規(guī)模太大的函數(shù),可以考慮分解成若干個(gè)小函數(shù)實(shí)現(xiàn)。而規(guī)模太小的函數(shù),如只有一條語(yǔ)句,可以考慮將該函數(shù)撤銷,直接用語(yǔ)句實(shí)現(xiàn)。一個(gè)函數(shù)中也不要實(shí)現(xiàn)太多功能,因?yàn)椴焕诖a重用。如上例求組合數(shù)中,如果在fac()函數(shù)中加入數(shù)據(jù)輸入或輸出的功能,那么在調(diào)用fac()時(shí)必然要求輸入并且將結(jié)果輸出??墒怯行┙Y(jié)果不需要輸出,只在計(jì)算中出現(xiàn),所以這樣的fac()函數(shù)反而不利于實(shí)現(xiàn)代碼重用性。因此要求設(shè)計(jì)函數(shù)時(shí),功能盡量簡(jiǎn)潔,也就是說(shuō)只實(shí)現(xiàn)最基本的功能即可。
函數(shù)的規(guī)模也不可過(guò)小,過(guò)小沒(méi)有意義,如上例中將變量值輸入也定義為一個(gè)函數(shù):
int read(int x)
{
scanf("%d",&x);
return x;
}
需要對(duì)變量輸入數(shù)據(jù)時(shí),調(diào)用該函數(shù):
m=read(m);
n=readtn);
這樣其實(shí)沒(méi)有太大的實(shí)際意義,不但沒(méi)有簡(jiǎn)化程序,反而增加了函數(shù)調(diào)用語(yǔ)句,增加代碼量。
(3)注意函數(shù)的層次不能過(guò)多
在函數(shù)設(shè)計(jì)中,常常為了實(shí)現(xiàn)一個(gè)函數(shù),必須在該函數(shù)內(nèi)再調(diào)用另一個(gè)函數(shù),稱為函數(shù)的嵌套,這樣就出現(xiàn)了如圖所示的層次關(guān)系。
從圖中可看到,從main()函數(shù)開始,整個(gè)程序分為4層,C語(yǔ)言中對(duì)于函數(shù)的嵌套層次并沒(méi)有限制,但一般實(shí)際設(shè)計(jì)程序中,考慮到結(jié)構(gòu)清晰性及內(nèi)存的限制,一個(gè)程序中的函數(shù)層次不可過(guò)多。
點(diǎn)擊加載更多評(píng)論>>