- 目標: 給未來的自己看懂
- 方法:
- First level: 外在 - naming, alignment
- Naming
- 使用精確的詞: e.g. search / load / …
- get/set 帶有 lightweight 的概念
- first/last 代表範圍內頭與尾的指標, begin/end 來表示範圍外的指標
- 避免 tmp, retval 等沒有解釋性的參數名詞
- Alignment
- 用 function / macro 等來對齊程式
- Group 不同目的的 function lists
- Constructors / deconstructors
- Getter / setters
- helper functions
- 使用段落來註解程式
- // 1. register database
- // 2. init
- // 3. CRUD operations
- // 4. release resources
- Comments
- 移除沒有意義的註解, e.g. variable name has explained
- 留下設計理念與意圖的註解 (全局觀)
- 留下 limitation / FIXME / TODO
- 提供 example (UT)
- Second level: control flow
- loops
- 避免 do-while (except marco using do-while(0))
- 大多時候避免 goto function
- 最小化 embedded loops
- Expressions / variables
- 利用暫存的解釋變量減少長表達式, 但有時反過來要移除沒必要的中間變量
- 盡可能縮小 variable scope (避免 global variables)
- 善用 marcos 縮短表達式長度
- Third level: 模組化
- 善用 utility functions 來做到模組化
- 利用 wrapper function 簡化 interface
- 各 function 一次只做一件事
- 熟悉既有 libraries
- 善用 scripts 處理簡單工作, e.g. awk parse logs
- Others:
- Test-driven
- Sample refactoring flow: from naïve solution to complete solution
- 延伸閱讀
- "Code Complete: A Practical Handbook of Software Construction, 2Ed", Steve McConnell
- "Refactoring: Improving the Design of Existing Code", Martin Fowler
- "The Practice of Programming", Brian Kernighan and Rob Pike
- "Clean Code: A Handbook of Agile Software Craftsmanship", RobertC. Martin
- "Design Patterns: Elements of Reusable Object-Oriented Software", Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- "Programming Pearls, 2Ed", Jon Bentley
2021年3月21日 星期日
[Refactoring] 編寫可讀代碼 筆記
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言