老生常谈:注释怎么写?
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
整理自知乎上我的一次回答。http://www.zhihu.com/question/20594192
我的觀點(diǎn),只寫說明性注釋,不寫功能性注釋。也就是說,注釋W(xué)hy,而不是How和What。
類和函數(shù)多寫文檔注釋,多少行無所謂,寫在最前面,只要你是注釋的Why。
函數(shù)內(nèi)部,盡量少寫注釋。如果你的代碼需要寫注釋來說明他的功能,那么這段代碼就需要重構(gòu),最簡(jiǎn)單的方法,最簡(jiǎn)單的方法:提取函數(shù)。這樣的好處是,函數(shù)名就是注釋。一個(gè)錯(cuò)誤的觀點(diǎn)就是?注釋是給人看的,程序是給電腦看的。其實(shí),程序是給人看的,湊巧的是,它居然可以在電腦里運(yùn)行。
《重構(gòu):改善既有代碼的設(shè)計(jì)》一書寫道: 每當(dāng)感覺需要以注釋來說明點(diǎn)什么的時(shí)候,我們就把需要說明的東西寫進(jìn)一個(gè)獨(dú)立函數(shù)中,并以其用途(而非實(shí)現(xiàn)手法)命名。 每次我給別人講解「選擇排序」、「插入排序時(shí)」,他們都覺得太難了,而且?guī)缀趺勘緮?shù)據(jù)結(jié)構(gòu)教科書都是寫了一堆代碼和注釋,這絲毫沒有降低這個(gè)算法的難度。
如果不寫注釋,而寫成函數(shù)呢?
偽代碼: array_ordered = []
loop_all_element(array, function(i){
? el = select(array[i+1, array.length])
? push(array_ordered, el)
? ......
})
插入排序呢?大同小異,我就不詳細(xì)寫了。
所以,文檔注釋,多少無所謂。函數(shù)內(nèi)、類內(nèi)注釋,能不寫,就不寫。
相關(guān)閱讀:千萬(wàn)要避免的五種程序注釋方式
你是否有過復(fù)查程序時(shí)發(fā)現(xiàn)有些注釋毫無用處?程序注釋是為了提高代碼的可讀性,為了讓原作者以外的其他開發(fā)人員更容易理解這段程序。
我把這些讓人郁悶的注釋方式歸為了五類,同時(shí)把寫出這些注釋的程序員也歸為了五類。我希望讀了這篇文章后你感覺自己不屬于其中的任何一種類型。如果你有興趣的話可以讀一下另外一篇文章?五種程序員(英文),和這篇講到的五種程序員對(duì)比一下。
1. 高傲的程序員
[java]?view plaincopy這種程序員是如此的欣賞自己的程序,以至于不得不在每行代碼上都署上自己的大名。應(yīng)該讓版本控制系統(tǒng)來提供程序變更的信息,他這樣做一眼看去并不能說明誰(shuí)對(duì)這行代碼負(fù)責(zé)。
2. 過時(shí)的程序員
[java]?view plaincopy如果一段程序不再有用(比如廢棄了),那就刪了它吧——不要被幾行沒用的注釋搞的程序混亂不堪。即使你可能以后重用這段代碼,你也可以使用版本控制系統(tǒng),用它把你的程序恢復(fù)到以前的樣子。
3. 天真的程序員
[java]?view plaincopy基本的編程語(yǔ)法規(guī)則我們大家都知道——我們不需要“編程入門”。你不需要浪費(fèi)時(shí)間來解釋一個(gè)顯而易見的東西,我們更希望知道的是你的程序功能——那是浪費(fèi)空間了。
4. 傳奇的程序員
[java]?view plaincopy如果你不得不在注釋里寫明需求,那也不要提到人名。銷售員Jim很可能在公司里不再是銷售。而且大多數(shù)讀到這段注釋的程序員未必都知道Jim是誰(shuí)。你描述的是實(shí)際情況但跟我們的內(nèi)容不相干,所以就省掉吧。
5. 未來程序員
[java]?view plaincopy這種注釋是一種集大成者,它包含了上面所說的注釋的所有問題。TODO注釋在一個(gè)項(xiàng)目最初的開發(fā)階段是非常有用的,但這個(gè)注釋看起來是在好幾年前的產(chǎn)品程序里的——它證明了程序有問題。如果程序有問題需要解決,馬上解決,不要拖到日后再解決。
如果你不幸是生成這些類型注釋的人,或者你想學(xué)習(xí)注釋用法的最佳實(shí)踐,我推薦你閱讀Steve McConnell寫的Code Complete(《代碼大全》)。這是一本我建議程序員必讀的書籍,CSDN 地址?http://blog.csdn.net/justjavac/article/details/7865418。
http://blog.csdn.net/justjavac/article/details/8767078總結(jié)
以上是生活随笔為你收集整理的老生常谈:注释怎么写?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习部分国内牛人
- 下一篇: 为什么数组是从0开始的