《代碼整潔之道》整理


1、命名篇

  1. 避免使用誤導性的命名,比如是List類型變量才會命名為accountList;不使用小寫的字母L和大寫的字母O來命名變量,因為他們會和數字1和0混淆
  2. 變量的命名使用有區分意義的詞。比如,ProductInfoProductData就沒區分;InfoData就像theaan一樣是混淆的廢話;變量名不出現Variable,表名不出現Table
  3. 類名不出現ManagerProcessorDataInfo這類類名;類名必須是名詞
  4. 使用工廠來新建對象比new對象要好,可以將構造函數private化,比如Complex.fromRealNameNumber(23.0)new Complex(23.0)要好
  5. 每個概念只使用一個詞。比如,fetchretriveget表示一個意思,盡量別同時出現多個

2、函數篇

  1. 函數應該短小,20行封頂最佳
  2. 函數應該只做一件事情,如果一個函數可以繼續拆分,則說明該函數不止做了一件事
  3. switch 語句如果太長,可以考慮使用 多態 來替代
  4. 函數名不要怕長,最好使用描述性的名稱,能表達出函數的意義就好
  5. 函數參數:
    1. 函數的參數越少越好,最好別超過三個,三個或三個以上可以封裝成一個對象
    2. 對於傳入單個參數的函數,一種普遍的作用是使用該參數做別的事,另一種是操作該參數本身。這種情況參數名最好能區分這兩種形式,比如String transform(StringBuffer in),告訴讀者期望的輸入和輸出類型。
    3. 如果需要向函數傳入布爾值,可能考慮將函數分為兩個函數使用
  6. 函數名最好由動詞加名詞組成,比如write(name)就不如writeFiled(name)好,后者清楚知道name是個filed
  7. 函數名要明確描述函數所做的所有事情,避免給調用者帶來意外的混亂
  8. 使用異常代替返回錯誤碼。錯誤碼是在要求調用者立即處理錯誤,異常可以在后面統一處理
  9. 使用了try...catch的代碼塊最好單獨抽離出來一個函數,再調用他,避免把主流程混亂
  10. 消除重復的代碼

3、注釋篇

  1. 注釋的作用是彌補我們在用代碼表達意圖時遭遇的失敗,所以說,注釋是一種失敗!

  2. 如果遇到需要寫注釋的情況,可以優先考慮是否能用變量名或方法名來表達,比如下面,第二種表達會更好:

    // 判斷員工是否合法,並且年齡大於65歲
    if(employee.flag && employee.age > 65)
    
    if(employee.isEligibleForFullBenefits())
    
  3. 好的注釋使用范圍:

    1. 表明法律、作者信息
    2. 提供有用的信息,比如對抽象函數注釋、對一個正則表達式期望匹配的格式注釋等
    3. 闡釋,對一個比較難懂的參數或返回值進行說明
    4. 警示,對一些重要代碼進行警示,防止別人修改該代碼
    5. // TODO對未完成的工作進行注釋
    6. 公共API的Javadoc
  4. 壞的注釋實例:

    1. 多余的注釋,比如有無注釋意圖都很明顯的代碼

    2. 誤導性注釋,注釋和代碼實際行為不符合

    3. 循規式注釋,比如要求所有函數都要有Javadoc注釋

    4. 能用函數或是變量名時,就別用注釋

    5. 括號后后面的注釋,本意是好的,但是根本解決方法應該是縮短函數篇幅

      while(xxxx){
      	.......
      	if(xxx){
      		......
      	} // if
      } // while
      
    6. 注釋掉的不用的代碼直接刪除,別怕找不回

4、格式篇

  1. 封包聲明、導入聲明和每個函數之間使用 空行 隔開,提高代碼的視覺效果

  2. 質檢關系“親密”的概念應該相互 靠近,而不是空行隔開

  3. 變量的聲明應該在 靠近 使用的位置

  4. 類成員變量應該聲明在類的頂部,循環中變量應該在括號內聲明

  5. 相關函數,比如A函數調用了B函數,則A和B最好放在一起,而且A放在B上面

  6. 每行代碼長度最好不要太長,比如最好80個字符,或是100~120個字符內

5、對象和數據結構篇

  1. 類的私有變量如果提供了取值器和賦值器,那么它仍然是 暴露

  2. 墨忒爾定律:模塊不該去了解它所操作對象的內部情形。就是說,對象不改通過存取器暴露其內部變量。更准確的說,墨忒爾定律認為,類C的方法f只能調用以下對象的方法

    1. C
    2. 由f創建的對象
    3. 作為參數傳遞給f的對象
    4. C的成員變量的對象

    即,方法不該調用任何函數返回的對象的方法,只跟朋友對話,不與陌生人對話

6、其他

  1. 函數不要返回控制,避免使用時檢查
  2. 函數參數不要傳遞空值
  3. 第三方API如果拋出大量異常,可以考慮封裝下再使用

說明:本文整理了部分書中觀點,有些觀點個人感覺有點苛刻不太實用,還有些章節直接略過了。想更詳細了解請參考原著。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM