函數(shù)

短小

函數(shù)的第一規(guī)則是要短小;第二條規(guī)則則是還要更短小
函數(shù)應(yīng)該20行封頂。

  • 代碼塊和縮進(jìn)
    if語(yǔ)句、else語(yǔ)句、while語(yǔ)句等,其中的代碼塊應(yīng)該只有一行,該行大致是一個(gè)函數(shù)調(diào)用語(yǔ)句。這樣不僅能保持函數(shù)短小,而且因?yàn)閴K內(nèi)調(diào)用的函數(shù)擁有較具說(shuō)明性的名稱(chēng),從而增加了文檔的價(jià)值。
  • 只做一件事
    函數(shù)應(yīng)該做一件事。做好這件事。只做這一件事。
    判斷函數(shù)是否做了不止一件事的一個(gè)方法就是能否再拆出一個(gè)函數(shù),這個(gè)函數(shù)不是單純的重新詮釋其實(shí)現(xiàn)。
    只做一件事的函數(shù)無(wú)法被合理地切分為多個(gè)區(qū)段。
  • 每個(gè)函數(shù)一個(gè)抽象層級(jí)
    要確保函數(shù)只做一件事,函數(shù)中的語(yǔ)句都在同一抽象層級(jí)上。

自頂向下讀代碼:向下規(guī)則
我們想讓代碼擁有自頂向下的閱讀順序。我們想讓每個(gè)函數(shù)后面都跟著位于下一抽象層級(jí)的函數(shù),這樣一來(lái),在查看函數(shù)列表是,就能循抽象層級(jí)向下閱讀。我們把這叫做向下規(guī)則。
換一種說(shuō)法我們想要這樣讀程序:程序就像是一系列TO起頭的段落,每一段都描述當(dāng)前抽象層級(jí),并引用位于下一抽象層級(jí)的后續(xù)TO起頭段落。

  • switch語(yǔ)句
    對(duì)于switch語(yǔ)句,如果只出現(xiàn)一次,用于創(chuàng)建多態(tài)對(duì)象,并且隱藏在某個(gè)繼承關(guān)系中,在系統(tǒng)其他部分看不見(jiàn),就還能容忍。

使用描述性的名稱(chēng)

選擇描述性的名稱(chēng)能理清關(guān)于模塊的設(shè)計(jì)思路,有助于改進(jìn)。
命名方式要保持一致。使用與模塊名一脈相承的短語(yǔ)、名詞和動(dòng)詞給函數(shù)命名。

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

零參數(shù)函數(shù) 優(yōu)于 單參數(shù)函數(shù) 優(yōu)于 雙參數(shù)函數(shù);因盡量避免三參數(shù)以上的函數(shù)。
輸出參數(shù)比輸入?yún)?shù)要難以理解。我們慣于認(rèn)為信息通過(guò)參數(shù)傳入函數(shù),通過(guò)返回值從函數(shù)輸出。我們不太期望信息通過(guò)參數(shù)輸出。

  • 一元函數(shù)
    向函數(shù)傳入單個(gè)參數(shù)有兩種極普遍的理由。

    1. 問(wèn)關(guān)于那個(gè)參數(shù)的問(wèn)題
    2. 操作參數(shù)

    還有一種不那么普遍但仍極有用的單參數(shù)函數(shù)形式,那就是事件。在這種形式中,有輸入?yún)?shù)無(wú)輸出參數(shù)。
    所以我們?cè)诿麜r(shí)要注意名稱(chēng)的區(qū)別,讓讀者能輕易分辨是哪種類(lèi)型。

  • 參數(shù)對(duì)象
    如果函數(shù)看起來(lái)需要二個(gè)、三個(gè)和三個(gè)以上參數(shù),就說(shuō)明其中一些參數(shù)應(yīng)該封裝成類(lèi)。

  • 動(dòng)詞與關(guān)鍵詞
    給函數(shù)起個(gè)好名字,能更好的解釋函數(shù)的意圖,以及參數(shù)的順序和意圖。對(duì)于一元函數(shù),函數(shù)和參數(shù)應(yīng)當(dāng)形成一種非常良好的動(dòng)詞/名詞對(duì)形式。

其他

  • 分隔指令與詢(xún)問(wèn)
    函數(shù)要么做什么事,要么回答什么事,但二者不可兼得。函數(shù)應(yīng)該修改某對(duì)象的狀態(tài),或者返回對(duì)象的有關(guān)信息。
  • 使用異常代替返回錯(cuò)誤碼
  • 抽離try/Catch代碼塊
  • 錯(cuò)誤處理就是一件事
  • 別重復(fù)自己
  • 結(jié)構(gòu)化編程
    每個(gè)函數(shù)、函數(shù)中的每個(gè)代碼塊都應(yīng)該有一個(gè)入口、一個(gè)出口。這意味著每個(gè)函數(shù)中只該有一個(gè)return,不能有break或continue語(yǔ)句,而且永永遠(yuǎn)遠(yuǎn)不能用有g(shù)oto語(yǔ)句。
    但是只要函數(shù)保持短小,偶爾出現(xiàn)的return、break或continue語(yǔ)句沒(méi)有壞處。但是goto在小函數(shù)中應(yīng)該盡量避免使用。
最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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