- 命名特殊字母與數字需避免使用 EX: 零與O
- 命名必須清楚,避免使用類似的同義詞 EX: productData & productInfo 卻代表不同意
- 無須再用自首prefix ex: m_book
- 類別與物件用名詞命名
- 方法用動詞或動詞片語 ex: deletePage,判斷情況應用is開頭 ex: isMoved
- 函式盡量簡短,每個函式只做一件事,若需做其他事需在名稱上寫清楚
- 程式碼由上而下敘事
- Switch 只可出現在產生多型物件,故就只會有一次
- 函式參數不可多,需避免超過三個,函式名稱要和參數形成動詞+名詞配對 ex: writeField(string name)
- 用exception 取代回傳錯誤碼
- 註解無法彌補糟糕的程式,而且可能因為沒同步修改造成誤解
- 日誌型或修改異動註解 已經註解程式碼現今已可用git 取代,都不再需要
- 不要回傳null
- 傳入參數有異動最好回傳出來並用函式名稱說明清楚
- 單元測試一次測一個Assert 一個概念
- 整潔的測試原則
- Fast:可快速執行
- Independent:不該相互依賴,不該成為其他測試的條件
- Repeatable:任何環境都可重複執行
- Self Validating:測試程式應輸出Boolean,不用手動比較結果
- Timely(即時)
- 類別簡短,用職責數量為單位計算,單一職責
- 類別名稱含糊表示職責不清Ex: manager
- Dependency Injection 是IoC (Inversion of control)在相依性管理的一種手段,將某物件的第二職責移至其它專注於該職責的物件裡,也支援了單一職責原則。
- 簡單設計守則:執行完所有測試、程式重構(禁止重複、具表達力、最小化類別與方法數量)
- 保持平行化相關程式(多執行緒)與其他程式有清楚劃分
- Multi thread 防禦原則:
- 限制資料視野 用synchronized ,但synchronized區塊內程式需簡短
- 複製物件並讓他變為唯讀
- 控制共享資料數量,盡可能獨立運行執行緒,與其他執行緒不共享資料,資料都區域變數
- Java相關類別:java.util.concurrent,java.util.concurrent.atomic,java.util.concurrent.locks ex:CountDownLatch 用於在釋放所有等待這個鎖的執行緒之前,這個鎖會先等待指定數量的事件。使得所有執行緒都有機會同時啟動。
- ReentrantLock 一個被A方法取得,在B方法釋放的鎖
- 避免從一個鎖定區域呼叫另一個鎖定區
2018年1月13日 星期六
Clean code summary
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言