讀書筆記——代碼整潔之道

《代碼整潔之道》

有意義的命名

  • 名副其實 不用註釋也能看懂
  • 避免誤導 iol容易與數字10混淆
  • 做有意義的區分 a1 a2 ... aN
  • 方便搜索的名稱 MAX_CLASSESPERSTUDENT 比找數字7容易
  • 避免編碼
    • 不用寫上類型,phoneNumber phoneString,類型改變時變量名容易忘記改;
  • 類名名次,方法名動詞
  • 避免雙關語 如 add insert append

函數

  • 只做一件事 函數應該做一件事,做好一件事。只做一件事
  • 每個函數一個抽象層級 自頂向下讀代碼,函數中混雜不同抽象層級,會讓人迷惑
  • 描述性的名稱 長而具有描述行的名稱,要筆短而令人費解的名稱好
  • 函數參數 數量越少越好,可以用對象封裝,參數不要做輸出
  • 無副作用 函數承諾只做一件事,但還是會做其他被隱藏起來的事,在函數名上體現出來
  • 分隔指令與詢問 函數要麼做事情,要麼回答什麼事,不可兼得
    if(set("username", "tom"))
  • 使用異常代替返回錯誤碼
  • 抽離try/catch 代碼段 try和catch代碼快的主體部分抽離出來,形成函數

註釋

  • 儘量用代碼來詮釋
  • 提供信息的註釋
  • 對意圖的解釋
  • 警告 警告其他程序員修改後會有哪些影響
  • javadoc
  • 刪除註釋的代碼 有源代碼控制系統了

格式

  • 垂直距離 空白行隔離開概念,相關函數儘量反正一起,被調函數在調用函數下面
  • 橫向距離 
    a = b; -b + 4*a
    main(String a, int b)

錯誤處理

  • 使用異常而非返回碼
  • 別返回null值
  • 別傳遞null值

邊界

  • adapter模式

單元測試

  • TDD(測試驅動開發)
    • 在編寫不能通過的單元測試前,不可編寫生產代碼
    • 只可編寫剛好無法通過的單元測試,不能編譯也算不通過
    • 只可編寫剛好足以通過當前失敗測試的生產代碼
  • 保持測試整潔可讀性
  • 每個測試一個斷言
  • FIRST
    • 快速 fast
    • 獨立 independent
    • 可重複 repeatable
    • 自足驗證 self-validating
    • 及時 timely

  • 類應該小 單一權責原則,內聚

系統

  • 構造與使用分開 工廠、依賴注入
  • 擴容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章