寫(xiě)好函數(shù)之要

我們每個(gè)人剛開(kāi)始編程寫(xiě)代碼時(shí),函數(shù)總是寫(xiě)得冗長(zhǎng)而復(fù)雜,有太多的縮進(jìn)和嵌套循環(huán),有過(guò)長(zhǎng)的參數(shù)列表。函數(shù)名稱是隨意取的,也會(huì)有重復(fù)代碼出現(xiàn)在不同函數(shù)體中。但是,這沒(méi)有關(guān)系,寫(xiě)好函數(shù)重在細(xì)節(jié)+耐心打磨。我們需要多幾次分解函數(shù),修改函數(shù)名稱,消除重復(fù),重新安置函數(shù),甚至拆散類。打磨函數(shù),規(guī)范代碼本身就是工匠精神的體現(xiàn),所以這一切很正常。

如何寫(xiě)好代碼中的函數(shù)?也許我們需要注意這些。

短小

俗話說(shuō):函數(shù)的第一規(guī)則是短小,第二規(guī)則是還要更短小。保證一個(gè)函數(shù)只做一件事,它最長(zhǎng)不過(guò)20行左右。

在遇到if語(yǔ)句,else語(yǔ)句,while語(yǔ)句等,其中的代碼應(yīng)該只保持一行。該行大抵是一個(gè)函數(shù)調(diào)用語(yǔ)句。這樣不但能保持函數(shù)短小,而且,塊內(nèi)調(diào)用的函數(shù)擁有較為具體說(shuō)明性的名稱,從而增加了代碼的可讀性。這樣,函數(shù)的縮進(jìn)層級(jí)不該多于一層或兩層。

只做一件事

函數(shù)應(yīng)該只做一件事。編寫(xiě)函數(shù)是為了把大一些的概念拆分為另一抽象層上的一系列步驟。函數(shù)只做一件事指的是在函數(shù)本身這一抽象層級(jí)上的一件事兒,具體的實(shí)現(xiàn)步驟,可以通過(guò)實(shí)現(xiàn)下一層級(jí)的函數(shù)來(lái)調(diào)用。

如果函數(shù)還可以拆分出另一個(gè)函數(shù)或者可以被劃分為多個(gè)區(qū)段,則該函數(shù)違反了"一件事"原則。

每個(gè)函數(shù)一個(gè)抽象層級(jí)

函數(shù)中的語(yǔ)句都要在統(tǒng)一抽象層級(jí)上,你可能會(huì)調(diào)用某個(gè)較高層級(jí)的函數(shù),例如實(shí)現(xiàn)貓圖像識(shí)別的函數(shù),但在該函數(shù)底部卻輸出該圖像到磁盤(pán)上。調(diào)用貓識(shí)別的函數(shù)抽象較高,后面輸出太過(guò)于具體,違反了"一個(gè)抽象層級(jí)"的原則。

switch語(yǔ)句

盡量避免使用switch語(yǔ)句,switch語(yǔ)句太長(zhǎng),它明顯做了不止一件事。如果無(wú)法避免switch,盡量讓每個(gè)分支在統(tǒng)一抽象級(jí)上。

使用描述性名稱

函數(shù)一般是一個(gè)動(dòng)賓短語(yǔ),不用怕名稱太長(zhǎng),盡量保持描述性。另外,在同一抽象層級(jí)上的函數(shù)保持函數(shù)命名方式一致。

函數(shù)參數(shù)

函數(shù)參數(shù)理想情況為0個(gè),其次是1個(gè),再次是2個(gè),盡量避免3個(gè)。函數(shù)參數(shù)最好不作為返回值。如果確實(shí)有很多內(nèi)容需要作為參數(shù)傳進(jìn)函數(shù),可以歸納參數(shù)的一致性并封裝成類,作為對(duì)象傳進(jìn)函數(shù)。

分割指令和詢問(wèn)

函數(shù)要么做了一件事,要么用于判斷一件事。一個(gè)函數(shù)最好不要同時(shí)把做的事情和需要判斷的條件放在一個(gè)函數(shù)體中。這屬于兩件事。

避免重復(fù)

不同的函數(shù)體中如果出現(xiàn)相同或者相似功能的語(yǔ)句,最好抽象成函數(shù)統(tǒng)一起來(lái),避免代碼冗余。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容