2008-09-23 189 views
24

您有什麼最佳做法可供評論?什麼時候應該使用它們,以及它們應該包含什麼?還是需要評論?你喜歡你的評論嗎?

+0

如果對編碼風格感興趣。然後參考這個 - http://stackoverflow.com/questions/1417354/how-to-code-in-professional-manner – 2009-10-18 20:31:02

+0

Duplicate:http://stackoverflow.com/questions/36432/commenting-code – 2010-02-19 19:14:01

+0

@Roger,我幾乎可以肯定,你的2年來不及說服人們關閉這個問題:) – Earlz 2010-02-19 19:16:44

回答

59

評論是可維護性必不可少的。要記住的最重要的一點是解釋爲什麼你正在做的事情,而不是什麼你在做什麼。

1

我認爲這取決於場景。

方法/函數/類需要簡短描述他們做什麼,他們是如何做的,他們做了什麼以及他們返回什麼,如果不是立即顯而易見的,通常(在我的代碼中)以javadoc的形式出現樣式的評論塊。

在塊代碼中,我傾向於在一行代碼之上留下注釋以解釋它的作用,或者如果它是一個簡短且隱含的函數調用,則會在行末。

10

在學校,規則是評論一切,以至於評論勝過代碼。我認爲這很愚蠢。

我認爲應該使用註釋來記錄代碼背後的「爲什麼」,而不是「如何」......代碼本身解釋了「如何」。如果有一項操作不清楚它爲什麼完成,那麼這是一個評論的好地方。

TODO's和FIXME有時會發表評論,但理想情況下他們應該使用源代碼管理和錯誤跟蹤工具。

我不介意看似無用的註釋的一個例外是文檔生成器,它只會打印註釋功能的文檔 - 在這種情況下,每個公共類和API接口都需要至少評論一下獲取生成的文檔。

7

理想的情況下您的程序可以與讀者代碼,而不是溝通在評論中。在我看來,編寫其他程序員可以快速理解的軟件的能力將最好的程序員從平均水平上分離出來。通常,如果您或您的同事無法理解沒有評論的代碼段,那麼這是一種「代碼味道」,重構應該是有序的。但是,會有一些古老的圖書館或其他整合,一些評論指導普通開發人員不一定是壞事。

7

通常的答案是:這取決於。我認爲,如果評論是好的或不好的,你寫評論的原因對於決定非常重要。有多種可能的原因徵求意見:

  • 使結構更清晰(即其循環在這裏結束)

壞:這看起來像一個可能的代碼味道。爲什麼代碼如此複雜,以至於需要評論才能清除該問題?

  • 解釋,什麼代碼確實

非常糟糕:這在我看來是危險的。通常會發生,你後來改變了代碼並忘記了評論。現在評論是錯誤的。這真是太糟了。

  • 指示解決方法/一個bug修正

好:有時一個問題的解決方案似乎很清楚,但簡單的方法有問題。如果您解決了這個問題,那麼添加評論可能會有幫助,爲什麼選擇此方法。否則,另一位程序員以後會想,他會「優化」代碼並重新引入該錯誤。想想Debian OpenSSL問題。 Debian開發人員刪除了一個單位變量。通常情況下,單位變量是一個問題,在這種情況下,它是隨機性所必需的。代碼評論將有助於澄清這一點。

  • 的文件,目的

好:有些文檔可從特殊格式的註釋(即的Javadoc)來生成。記錄公共APIs是有用的,這是必須的。重要的是要記住,該文檔包含代碼的意圖,而不是實現。因此,回答評論「爲什麼你需要這種方法(以及你如何使用它)」或者該方法是什麼?

1

我認爲刪除註釋的新動作很糟糕......原因是,有很多程序員認爲他們編寫的代碼很容易理解,並且不需要註釋。但事實上並非如此。

你閱讀其他人的代碼的百分比,並立即明白它..也許我讀了太多經典的asp,Perl和C++,但我讀的大多數東西都是棘手的撇去。

你有沒有讀過別人的代碼,並且完全被它迷惑了。你認爲他們在寫作的時候會想,這是廢話,但我並不在乎。他們可能認爲哦......這是非常聰明的,它會是快速的 SUPER

2

只是一些言論:

評論功能是無法從代碼(例如複雜的數學算法)可以容易地推斷出所有重要資料。

評論的問題是,他們需要像代碼一樣維護,但通常不會被維護。

我不喜歡的評論是這樣的:

// Create the "Analyze" button 
Button analyzeButton = new Button(); 
analyzeButton.Text = "Analyze"; 
analyzeButton.Location = new Point(100, 100); 
Controls.Add(analyzeButton); 

更好:

CreateAnalyzeButton(); 


void CreateAnalyzeButton() 
{ 
    Button analyzeButton = new Button(); 
    analyzeButton.Text = "Analyze"; 
    analyzeButton.Location = new Point(100, 100); 
    Controls.Add(analyzeButton); 
} 

現在代碼道出了原委。無需評論。