Clean Code讀書筆記
第一章 整潔代碼
什么是整潔代碼
- 代碼邏輯直截了當(dāng)
- 盡量較少依賴關(guān)系,使之便于維護(hù)
- 分層戰(zhàn)略完善錯誤代碼
- 性能調(diào)制最優(yōu)
- 整潔代碼只做一件事
--- Bjarne C++發(fā)明者
破窗理論
可讀性:整潔的代碼猶如優(yōu)美的散文
--- Grady Booch, 面向?qū)ο蠓治雠c設(shè)計作者有單元測試和驗收測試
使用有意義的命名
代碼應(yīng)在字面上表達(dá)其含義
盡量少的依賴
盡量少的api
盡量小的代碼塊
--- Dave Thomas
- 能通過所有測試
- 沒有重復(fù)代碼
- 體現(xiàn)系統(tǒng)中的全部設(shè)計理念
- 包括盡量少的實體,比如類、方法、函數(shù)等。
--- Ron Jeffries(極限編程作者)
童子軍軍規(guī):讓營地比你來時更干凈。
小結(jié)
整潔代碼的特點有:
- 沒有重復(fù)代碼
- 只做一件事
- 盡量小的代碼塊,盡量少的實體,盡量少的API
- 盡量少的依賴,便于維護(hù)
- 字面含義能表達(dá)其含義,有意義,可讀性強
- 能通過所有測試
- 體現(xiàn)系統(tǒng)中的全部設(shè)計理念
- 分層戰(zhàn)略完善錯誤代碼
- 性能調(diào)制最優(yōu)
第二章 有意義的命名
名副其實
避免誤導(dǎo)
- 避免變量名與系統(tǒng)中專有名詞混淆,如hp、aix、sco等
- 避免用accountList來表示一個不是List類型的數(shù)據(jù),可以改為accountGroup,或者accounts。
- 避免兩個名稱只有一小部分有區(qū)別,如XYZControllerForEffecientHandlingOfString,與XYZControllerForEffecientStoringOfString
做有意義的區(qū)分
- 如Product與ProductInfo,以及ProductData類,盡管名稱不同,意思卻無區(qū)別。
- moneyAmount與money沒區(qū)別,customerInfo與customer沒區(qū)別,theMessage與message沒區(qū)別
- Variable一詞永遠(yuǎn)不應(yīng)該出現(xiàn)在變量名中
- Table一詞永遠(yuǎn)不應(yīng)當(dāng)出現(xiàn)在表名中
要區(qū)分名稱,就要以讀者能鑒別不同之處的方式來區(qū)分。
使用讀得出來的名稱
- 不要使用自造詞
使用可搜索的名稱
- MAX_CLASSES_PER_STUDENT比7更有搜索
- e作為變量名不易于搜索
長名稱勝于短名稱
- 單字母名稱僅用于短方法中的本地變量
避免使用編碼
- 避免把類型或作用域編進(jìn)名稱里面
- 變量中不建議添加類型前綴。(因為Java是強類型語言,現(xiàn)在編譯器能夠在編譯前檢查類型。)
- 命名中添加類型會導(dǎo)致修改與維護(hù)的難度,也增加了閱讀的難度。
匈牙利語標(biāo)記法(Hungarian Notation, HN)是由于在歷史中,編譯器不做類型檢查,程序員需要匈牙利語標(biāo)記法來幫助自己記住類型。
避免使用前綴
- 應(yīng)該用顏色高亮來區(qū)分成員。
接口和實現(xiàn)
- 若需要對接口和實現(xiàn)命名,不建議使用IShapeFactory,和ShapeFactory
- 如果非要選擇其中之一進(jìn)行編碼,作者建議選擇實現(xiàn)。如ShapeFactoryImp
類名
類名和對象名應(yīng)該是名稱或名詞短語,不應(yīng)該是動詞
方法名
- 方法名應(yīng)該是動詞或動詞短語
- 屬性訪問器、修改器、斷言應(yīng)該根據(jù)其值命名,并依據(jù)JavaBean標(biāo)準(zhǔn)加上get,set和is前綴。
每個概念對應(yīng)一個詞
- 避免同時使用fetch/retrieve/get
- 同一堆代碼同時使用controller,manager, driver等會讓人困惑。
避免用雙關(guān)語
- 避免將同一單詞用于不同目的。
使用解決方案領(lǐng)域名稱
- 如果業(yè)務(wù)所涉及領(lǐng)域的名稱不易于理解,就應(yīng)該避免使用
- 應(yīng)該使用計算機領(lǐng)域的詞語去代替這些名稱。
添加有意義的語境
- 如addrState,addrFirstName比State, FirstName更好
- 可以將變量放到類中,添加語境
不要添加沒用的語境
- 避免使用幾乎涉及所有名稱的前綴
- 短名稱能表達(dá)清楚時,就不要用長名稱。(結(jié)合前面的思路,也不要太短,不然不易于搜索)。
- 精確命名是重點。