假設我有一個名爲DisplayWhiskers()的函數,它在屏幕上放置一些斜槓和反斜槓來表示動物的鬍鬚,如下所示:/// \\\。 我可能會寫沿函數的註釋是否應該包含它調用的函數完成的工作描述?
// Represents an animal's whiskers by displaying three
// slashes followed by a space and three backslashes
行此功能註釋,但如果我再添加功能DisplayKitten()和DisplaySealion(),它作爲關於顯示他們的工作電話DisplayWhiskers的)部分(多少細節的鬍鬚應該在這些其他功能的評論?
一方面,我應該可以查看DisplayKitten()的評論,並瞭解我需要的所有內容,包括它將如何顯示鬍鬚。我不應該去其他地方閱讀DisplayWhiskers()的評論來找出答案。另一方面,如果DisplayKitten()的註釋明確指向三個斜槓,後面跟着三個反斜槓,這似乎違背封裝的精神,並且如果稍後更改DisplayWhiskers(),則可能會變得錯誤。
什麼被認爲是最佳實踐?
編輯:幾個答案都建議解決方案是讀取代碼。我理解好代碼的原則是它自己最好的評論,但是對於這個問題,我並不是要引用代碼內的註釋,而是要引用伴隨函數原型的頭文件中的註釋。讓我們假設實際的代碼是預編譯的,並且對於想要使用或調用它的客戶是不可訪問的。
「看來我應該能夠查看DisplayKitten()的註釋,並理解我需要的關於它將要執行的操作的所有信息。」你爲什麼要這個?這聽起來像是對我的評論濫用。如果您想了解DisplayKitten將要執行的操作,請閱讀代碼。 – mquander 2009-12-05 19:13:54
對於它的價值,我完全不同意mquander。查看代碼是絕對的最後手段,只是證明你沒有正確定義接口。 DisplayKitten必須展示一隻小貓。如果每個人都開始「只是閱讀代碼」,並依靠實現細節甚至可能是錯誤,而不是假設他們會得到一隻小貓,那麼您將永遠無法再改變該代碼的一行而無需遵循它遍佈整個代碼庫。在一個組件當然,你可以放鬆一點關於封裝,但它對大型項目是至關重要的。 – 2009-12-05 21:31:03
所以:你應該記錄一隻小貓有六隻鬍鬚,如果(而且只是)你想要和呼叫者需要依靠那個。否則,不要證明小貓有六隻鬍鬚,任何假設小貓有六隻鬍鬚的呼叫者只是因爲他讀了你的代碼應該被認爲是惡意的破壞者,意圖破壞你的代碼庫的穩定性。也許我誇大了一點,但是在做完它之後,你不知道修復一個bug有多麼有趣,並且確信測試會通過,因爲沒有人依賴那些沒有記錄的錯誤行爲來實際發生。 – 2009-12-05 21:35:56