CleanCode代碼整潔之道:讀書筆記

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é)合前面的思路,也不要太短,不然不易于搜索)。
  • 精確命名是重點。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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