寫註解的第一步:決定慣例。包括「要為什麼東西寫註解」、「使用什麼格式」。
採用工具的慣例#
如果你的語言有文件編譯工具,依工具的慣例:
- Java → Javadoc
- C++ → Doxygen
- Go → godoc
這些慣例都不完美,但工具帶來的好處足以彌補。
沒有現成慣例的環境?借用相近語言或專案的慣例——讓其他開發者更容易理解與遵守。
慣例的兩個用途#
- 一致性:讓註解更易讀、易懂
- 督促你真的去寫:沒有清楚的「要寫什麼、怎麼寫」 → 結果就是什麼都不寫
註解的四個常見類別#
1. 介面註解(Interface comment)#
模組宣告(class、struct、function、method)正前方的註解區塊:
- 描述模組的介面
- 類別:整體抽象
- 方法 / 函式:行為、參數、回傳值、副作用、可能拋出的例外,以及呼叫前必須滿足的前置條件
2. 資料結構成員註解(Data structure member comment)#
資料結構欄位旁的註解(class 的 instance / static 變數)。
3. 實作註解(Implementation comment)#
方法 / 函式內部的註解,描述程式碼如何運作。
4. 跨模組註解(Cross-module comment)#
描述跨越模組邊界的依賴關係。
哪些一定要寫#
必寫:
- 每個類別都要有介面註解
- 每個類別變數都要有註解
- 每個方法都要有介面註解
偶爾宣告本身明顯到沒什麼可加(getter / setter 有時屬此類),但這種情況罕見。
**與其耗神判斷「需不需要」,不如全部寫——**這通常更省力、更可靠。
寫得頻率較低的兩類#
- 實作註解:通常不必(見 13.6 節)
- 跨模組註解:很少寫,且難寫;但需要時極為重要(見 13.7 節)