註釋程式碼的13技巧
本文發表在作者José M. Aguilar的部落格Variable Not Found,後來由Timm Martin翻譯成英文發表在DevTopics上。
以下是如何註釋程式碼的13tips,它們會在日後幫助你更容易理解和維護程式碼。
1. Comment each level(每個級別的註釋有統一的風格)
註釋每一個程式碼塊,並且在各個級別的程式碼塊上,要使用統一的註釋方法。例如:
對於類,應包含簡單的描述、作者以及最近的更改日期
對於方法,應包含目的的描述、功能、引數以及返回值
使用統一的註釋規則對於一個團隊是非常重要的。當然,更加推薦使用註釋的約定和工具(例如,C#的XML或Java的Javadoc),它們會是註釋變得更加容易。
2. Use paragraph comments(對段落註釋)
將程式碼塊分成若干完成獨立功能的"段落",並在每個"段落"前新增註釋,向讀者說明"即將發生什麼"。
// Check that all data records
// are correct
foreach (Record record in records)
{
if (rec.checkStatus()==Status.OK)
{
. . .
}
}
// Now we begin to perform
// transactions
Context ctx = new ApplicationContext();
ctx.BeginTransaction();
. . .
3. Align comments in consecutive lines(對齊註釋行)
對於擁有字尾式註釋的多行程式碼,排版註釋程式碼,使各行註釋對齊到同一列。
const MAX_ITEMS = 10; // maximum number of packets
const MASK = 0x1F; // mask bit TCP
一些開發人員使用tab來對齊註釋,有些則使用空格。但是由於tab在不同的編輯器或者IDE上會有所不同,最好還是使用空格。
4. Don't insult the reader's intelligence(不要侮辱讀者的智商)
不要寫沒用的註釋,例如:
if (a == 5) // if a equals 5
counter = 0; // set the counter to zero
寫這種無用的註釋不但浪費你的時間,而且讀者在讀這種很容易理解的程式碼時,很容易被你的註釋轉移注意力,浪費了時間。
5. Be polite(要有禮貌)
不要寫不禮貌的註釋程式碼,例如"注意,愚蠢的使用者輸入了一個負數",或者"修正由於最初的開發者的可憐且愚蠢的編碼所造成的副作用"。這樣的註釋冒犯了作者,而且你並不知道誰會在將來讀到這段註釋--你老闆、客戶或者是你在註釋中冒犯的那個可憐且愚蠢的開發人員。
6. Get to the point(簡明扼要)
不要在註釋中寫的過多,不要寫玩笑、詩和冗長的話。總之,註釋需要簡單直接。
7. Use a consistent style(風格一致)
一些人認為註釋應該能讓非程式設計師也能看懂,但是也有些人認為註釋僅僅是指導程式設計師的。不管怎麼說,像《Successful Strategies for Commenting Code》中所說,真正重要的是註釋始終面向同一個讀者,在這點上,應該保持一致。個人認為,我很懷疑會有非程式人員閱讀程式碼,所以應該把閱讀註釋的物件定位為開發人員。
8. Use special tags for internal use(在內部使用特殊的標籤)
團隊中處理程式碼時,在程式設計師之間應採用一系列統一的‘標籤註釋'進行交流。例如,很多團隊使用"TODO"來表示一段需要額外工作的程式碼。
int Estimate(int x, int y)
{
// TODO: implement the calculations
return 0;
}
‘標籤註釋'並不解釋程式碼,而是引起主意或者傳遞資訊。但是,使用這種方法時,務必要完成‘標籤註釋'傳遞的資訊。
9. Comment code while writing it(寫程式碼的同時,完成註釋)
寫程式碼的同時新增註釋,因為此時你的思路最為清晰。如果你把註釋的任務留到最後,那麼你相當於經歷了兩次編碼。"我沒有時間註釋""我太忙了""專案耽誤了"這些往往是不寫註釋的理由。所以,程式設計師們認為,最理想的解決方法是‘寫程式碼前先寫註釋'。例如:
public void ProcessOrder()
{
// Make sure the products are available
// Check that the customer is valid
// Send the order to the store
// Generate bill
}
10. Write comments as if they were for you (in fact, they are)把程式碼的讀者想象成你自己(實際情況往往如此)
註釋程式碼時,不僅僅要為將來可能維護你程式碼的人考慮,而且要考慮到讀註釋的可能是你。偉大的Phil Haack說過:"每當有一行程式碼被敲上螢幕,你都要從維護的角度審視一遍這段程式碼。" "As soon as a line of code is laid on the screen, you're in maintenance mode on that piece of code."(著名的話不敢不附上原句)
結果,我們自己往往是我們良好註釋的受益者,或者是爛註釋的受害人。
11. Update comments when you update the code(更新程式碼時,記得更新註釋)
如果不能隨著程式碼的更新而更新註釋,那麼即使再準確的註釋也毫無意義。程式碼和註釋必須同步,否則這些註釋對於維護你程式碼的程式人員來說簡直是折磨。在使用refactoring工具自動更新程式碼時,應尤其注意,它們會自動更新程式碼而不會改變註釋,這些註釋自然就過期了。
12. The golden rule of comments: readable code(可讀性良好的程式碼是最好的註釋)
對於許多程式設計師來說,基本的原則之一就是:讓程式碼自己說話。有人可能會懷疑這是那些不愛寫註釋的程式設計師的藉口,然而這確實是一個不爭的事實。自我解釋良好的程式碼對於編碼來說大有益處,不但程式碼容易理解甚至使註釋變得沒有必要。舉例來說,在我的文章《Fluid Interfaces》中展示了什麼是清晰的自我解釋型程式碼:
Calculator calc = new Calculator();
calc.Set(0);
calc.Add(10);
calc.Multiply(2);
calc.Subtract(4);
Console.WriteLine( "Result: {0}", calc.Get() );
在本例中,註釋是沒必要的,並且會違背tip#4 。為了使程式碼更加可讀,應該考慮使用適當的名字(像在經典的《Ottinger's Rules》描述的),確保正確的縮排和程式碼風格欄線(程式碼風格欄線是類似於#region #endregion這類的東西吧?)。如果這一點做的不好,直接後果是,你的註釋看起來就像是在為晦澀難懂的程式碼而道歉。
13. Share these tips with your colleagues(與你的同事share這些tips)
儘管tip#10中曾說過良好的註釋會是自己從中收益,但是這些tips會使所有開發人員收益,尤其是在團隊合作的環境中。因此大方的與同事分享這些註釋的技巧,讓我們都能寫出易懂而且好維護的程式碼。
相關文章
- 提高程式碼可讀性的 10 個註釋技巧
- Visual Studio模板程式碼註釋小技巧分享
- 有趣的程式碼註釋
- CSS程式碼註釋CSS
- php程式碼註釋PHP
- 程式碼才是最好的註釋
- 請停止程式碼註釋
- javascript如何註釋程式碼JavaScript
- 程式設計師是否有義務做好程式碼的註釋?你做好程式碼註釋了嗎?程式設計師
- Oracle PL/SQL程式碼中的註釋OracleSQL
- 9個最有趣的程式碼註釋
- HTML 程式碼註釋規範HTML
- Java程式碼註釋規範Java
- JProfiler 13 Mac版,JProfiler 13註冊碼Mac
- iOS 註釋方法大全 程式碼塊加快捷鍵註釋iOS
- 如何優雅地寫註釋:找到程式碼註釋的黃金平衡點
- 竟有如此沙雕的程式碼註釋!
- 10個最“優秀”的程式碼註釋
- java中程式碼的註釋和快捷鍵Java
- 遠離程式碼註釋的 5 個理由
- 請註釋你那該死的程式碼
- 五種應該避免的程式碼註釋
- Pycharm 程式碼註釋風格模板PyCharm
- jvm執行程式碼註釋部分JVM行程
- 改變Emacs下的註釋程式碼方式以支援當前行(未選中情況下)的註釋/反註釋Mac
- 如何把程式碼中的註釋批次刪除
- 匹配css程式碼註釋的正規表示式CSS
- 8個最沒有意義的程式碼註釋
- 程式碼註釋中的5要與3不要
- 趣味橫生的程式設計師搞怪程式碼註釋程式設計師
- iOS 註釋方法大全 程式碼塊加快捷鍵自定義註釋iOS
- 把Mybatis Generator生成的程式碼加上想要的註釋MyBatis
- 註釋 · 佛祖保佑程式碼永無BUG
- PHP搞笑註釋程式碼-佛祖配美女PHP
- 谷歌輸入法PinyinIme 程式碼註釋谷歌
- 使用GhostDoc為程式碼生成註釋文件
- 體面編碼之程式碼註釋評論
- 程式的版式和註釋