一、什麼是整潔的代碼
有多少程序員,就有多少定義。但共性都有以下幾點:
- 高效(性能)
- 優雅&簡單直接(可讀性)
- 消除重複
二、怎麼才能寫出整潔的代碼
1.有意義的命名
- 名副其實 —- 命名要有實際意義 重構方法實現時方法名是否還能否清晰表意,是否需要同步修改
- 避免誤導 —- 命名不全、不合適的縮寫
- 有意義的區分 —- ProductData、ProductInfo 避免廢話冗餘,NameString or Name
- 讀的出來的名稱 —- 切記不要造詞 genymdhms —> generateTimestamp
- 避免思維映射 —- 不應當讓讀者把你的命名翻譯成他們熟知的的名稱
- 有意義的語境 —- name or companyName or productName
PS:類名:名詞或名詞短語,避免使用Mananger、Processer、Info等
方法名:動詞或動詞短語
2.函數
- 短小 —- 少嵌套
- 只做一件事(單一職責)
- 函數中的語句處於同一抽象層
- 使用描述性的名稱
- 參數越少越好 —- 參數組合 避免標識參數boolean 多個參數是否應該合併封裝成類
- 無副作用 —- 該做的事沒做好 or 做了不該做的事
- 消除重複
3.類
- 類應該短小
- 單一職責
- 內聚
4.註釋
- 註釋不能美化糟糕的代碼
- 對意圖的解釋 — 簡潔
- 警示
- 誤導性註釋 — 理解不夠精確 or 代碼變遷
- 多餘的註釋
註釋的代碼 — 幹掉它
不要給糟糕的代碼加註釋——重寫吧!
5.對象與數據結構
- 對象隱藏數據,暴漏行爲 —- 便於添加新對象類型而無需修改既有行爲,但難以在既有的對象中添加新行爲
- 對象暴漏數據,隱藏行爲 —- 便於向既有數據添加新行爲,但難以向既有函數添加新的數據結構
6.錯誤處理
- 使用異常而非錯誤碼 —- 返回碼需要在條用之後即可檢查處理,擾亂調用者代碼
- try-catch-finally —– 只try明確存在異常的代碼 明確catch類型,切記不要通吃導致問題掩蓋
- 返回值儘量別傳null用空列表等代替
7.邊界
- 謹慎使用第三方代碼
- 未知的代碼