只要程式碼寫得好就不需要註解」是個誘人但錯誤的迷思——就像「冰淇淋對健康有益」一樣,我們都希望它是真的,但事實不是。

確實能做的事#

寫程式時可以做一些事減少對註解的需求:

  • 選好的變數名(第 14 章)
  • 結構清楚

但這些不能取代註解。

程式碼無法表達的設計資訊#

很多重要資訊根本無法僅靠程式碼表達:

  • 類別介面中只有一小部分(如方法簽章)能在程式碼中正式表達
  • 介面的非正式部分——例如方法做什麼的高階描述、回傳值的意義——只能透過註解
  • 設計決策的理由(rationale)
  • 一個方法何時該被呼叫的條件

「想知道方法做什麼?讀程式碼」這個論點不成立#

支持「無註解」的人會說:使用者想知道方法做什麼,自己讀程式碼最準。

問題:

  • 從程式碼推回抽象介面極其耗時且痛苦
  • 假設使用者會去讀實作 → 會逼開發者把每個方法寫得很短 → 製造一堆淺方法
  • 反而更難讀:要懂頂層方法,得先懂巢狀的子方法
  • 大型系統根本不可能讓使用者靠讀程式碼學行為

註解是抽象的根本#

抽象的目的是藏起複雜性:把實體簡化成保留必要資訊、省略可忽略細節的視角。

若使用者必須讀方法的程式碼才能用它,抽象就破功了——所有複雜性都暴露出來。

沒有註解時,方法唯一的抽象就是它的宣告:方法名 + 參數名 / 型別 + 回傳型別。

但宣告遠遠不夠

例如 substring(start, end)

  • 從宣告中,看不出取出的子字串會不會包含 end 指的字元
  • 也看不出 start > end 時會發生什麼

註解能補上呼叫端需要的資訊,完成「簡化視角」並同時隱藏實作細節

為什麼註解要用自然語言#

註解通常用英文(自然語言)寫——這讓它精確度比程式碼低,但表達力更高

自然語言能寫出簡單、直覺的描述。

如果你要用抽象藏起複雜性,註解是不可或缺的