《代碼整潔之道》在業內有很高的知名度,被諸多前輩推薦給後來者閱讀。本書以按部就班改造一個小程序的方式,演示了一個程序可能的各類設計(在代碼層面)。手把手教你該怎麼設計代碼,爲什麼要這樣設計,這樣設計的好處是什麼。經過一週的閱讀,總結了以下要點。python
全部的編程都是從HellWorld這個小函數開始的,學會設計函數很是重要編程
函數要短。短才方便閱讀、維護和設計。(每一個人都經歷過讀不懂本身代碼的尷尬)小程序
函數只作一件事。依照單一職責原則設計函數。一個函數能夠:流程控制,邏輯判斷,改變變量狀態,以及作運算,或者調用多個下一抽象級的函數。app
函數不該該有標識參數(除了做爲API的函數),這意味着函數有至少兩種執行方式,違反了第2條原則。並且明顯能拆成多個小函數。函數
函數參數越少越好有,多個參數應該封裝成一個總體傳入的。若是邏輯上不是一個總體,則函數確定能被拆成多個小函數而後被分別調用。第4條標識參數能夠封裝進總體傳入函數,而不是直接做爲函數的參數測試
函數真的最好只作一件事,不要爲了一時方便順手加幾行代碼。如登陸驗證時,函數用來驗證username和password,在驗證以後順便給用戶初始化些其餘東西。會致使這個函數在其餘時候沒法驗證用戶信息。編碼
底層函數不該該改變參數狀態,若是想改變某類的狀態,就把該函數加入該類,讓它本身調用函數。如:把改變類x的狀態的函數調用addFooter(x),改成x.addFooter()。debug
函數不要返回錯誤碼,這須要你有錯誤碼的枚舉類,而且違反了開放封閉原則(你須要加入新錯誤碼來擴展新錯誤),直接拋出異常就行了。(能夠經過繼承父異常來擴展)。可是實際上錯誤碼的應用不比異常少,並且異常也會致使代碼的臃腫。設計
函數名稱應該描述清楚函數做用,避免頻繁去看文檔,這對於短小的函數來講不難辦到,若是很難命名可能須要思考函數是否有依照以上原則設計(你一個函數可能作了不少事情)。而且名稱的命名應該不容易與其餘函數名稱造成混淆。如:add()在calculator中意思是加,而在List中就不該該用add表示插入集合了,應該用insert或append。簡單來講就是一個概念對應一個詞,而且始終如一。日誌
每一個人都有本身的編碼風格,書中總結了一些Java及其餘語言的建議
好的格式應該由小且精的代碼片斷(函數)組成
封包代碼,導包代碼,成員變量,函數方法。都用空行隔開,造成分開的代碼塊
函數按調用順序從上到下排列,類變量在頂端聲明,方法變量在使用前聲明
說了這麼多最後總結道:老大規定用啥格式就用啥格式
其實註釋寫了後,看的最多的仍是本身
書中對於函數的設計其實和類的設計思想是相似的,因此類應該功能單一且小巧,越小耦合性越低,最後用門面模式組合起來向外提供API就行了
系統總體結構的設計
測試不只僅是測試小姐姐的事情