注釋是為了方便自己或代碼維護(hù)方更容易地讀懂代碼的用處。
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項目實(shí)施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元滄源做網(wǎng)站,已為上家服務(wù),為滄源各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
一、背景?
1、當(dāng)我們第一次接觸某段代碼,但又被要求在極短的時間內(nèi)有效地分析這段代碼,我們需要什么樣的注釋信息??
2、怎么樣避免我們的注釋冗長而且凌亂不堪呢??
3、在多人協(xié)同開發(fā)、維護(hù)的今天,我們需要怎么樣的注釋來保證高質(zhì)、高交的進(jìn)行開發(fā)和維護(hù)工作呢??
二、意義?
程序中的注釋是程序設(shè)計者與程序閱讀者之間通信的重要手段。應(yīng)用注釋規(guī)范對于軟件本身和軟件開發(fā)人員而言尤為重要。并且在流行的敏捷開發(fā)思想中已經(jīng)提出了將注釋轉(zhuǎn)為代碼的概念。好的注釋規(guī)范可以盡可能的減少一個軟件的維護(hù)成本?,?并且?guī)缀鯖]有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護(hù)。好的注釋規(guī)范可以改善軟件的可讀性,可以讓開發(fā)人員盡快而徹底地理解新的代碼。好的注釋規(guī)范可以最大限度的提高團(tuán)隊開發(fā)的合作效率。長期的規(guī)范性編碼還可以讓開發(fā)人員養(yǎng)成良好的編碼習(xí)慣,甚至鍛煉出更加嚴(yán)謹(jǐn)?shù)乃季S能力。?
三、注釋的原則?
1、 注釋形式統(tǒng)一?
在整個應(yīng)用程序中,使用具有一致的標(biāo)點(diǎn)和結(jié)構(gòu)的樣式來構(gòu)造注釋。如果在其他項目組發(fā)現(xiàn)他們的注釋規(guī)范與這份文檔不同,按照他們的規(guī)范寫代碼,不要試圖在既成的規(guī)范系統(tǒng)中引入新的規(guī)范。?
2、 注釋的簡潔?
內(nèi)容要簡單、明了、含義準(zhǔn)確,防止注釋的多義性,錯誤的注釋不但無益反而有害。?
3、 注釋的一致性?
在寫代碼之前或者邊寫代碼邊寫注釋,因?yàn)橐院蠛芸赡軟]有時間來這樣做。另外,如果有機(jī)會復(fù)查已編寫的代碼,在今天看來很明顯的東西六周以后或許就不明顯了。通常描述性注釋先于代碼創(chuàng)建,解釋性注釋在開發(fā)過程中創(chuàng)建,提示性注釋在代碼完成之后創(chuàng)建。修改代碼的同時修改相應(yīng)的注釋,以保證代碼與注釋的同步。?
4、 注釋的位置?
保證注釋與其描述的代碼相鄰,即注釋的就近原則。對代碼的注釋應(yīng)放在其上方相鄰或右方的位置,不可放在下方。避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時,行尾注釋是合適的;在這種情況下,將所有行尾注釋要對齊。?
5、 注釋的數(shù)量?
注釋必不可少,但也不應(yīng)過多,在實(shí)際的代碼規(guī)范中,要求注釋占程序代碼的比例達(dá)到20%左右。注釋是對代碼的“提示”,而不是文檔,程序中的注釋不可喧賓奪主,注釋太多了會讓人眼花繚亂,注釋的花樣要少。不要被動的為寫注釋而寫注釋。?
6、刪除無用注釋?
在代碼交付或部署發(fā)布之前,必須刪掉臨時的或無關(guān)的注釋,以避免在日后的維護(hù)工作中產(chǎn)生混亂。?
7、 復(fù)雜的注釋?
如果需要用注釋來解釋復(fù)雜的代碼,請檢查此代碼以確定是否應(yīng)該重寫它。盡一切可能不注釋難以理解的代碼,而應(yīng)該重寫它。盡管一般不應(yīng)該為了使代碼更簡單便于使用而犧牲性能,但必須保持性能和可維護(hù)性之間的平衡。?
8、 多余的注釋?
描述程序功能和程序各組成部分相互關(guān)系的高級注釋是最有用的,而逐行解釋程序如何工作的低級注釋則不利于讀、寫和修改,是不必要的,也是難以維護(hù)的。避免每行代碼都使用注釋。如果代碼本來就是清楚、一目了然的則不加注釋,避免多余的或不適當(dāng)?shù)淖⑨尦霈F(xiàn)。?
9、必加的注釋?
典型算法必須有注釋。在代碼不明晰或不可移植處必須有注釋。在代碼修改處加上修改標(biāo)識的注釋。在循環(huán)和邏輯分支組成的代碼中添加注釋。為了防止問題反復(fù)出現(xiàn),對錯誤修復(fù)和解決方法的代碼使用注釋,尤其是在團(tuán)隊環(huán)境中。?
10、注釋在編譯代碼時會被忽略,不編譯到最后的可執(zhí)行文件中,所以注釋不?
會增加可執(zhí)行文件的大小。?
四、JAVA注釋技巧?
1、空行和空白字符也是一種特殊注釋。利用縮進(jìn)和空行,使代碼與注釋容易區(qū)?
別,并協(xié)調(diào)美觀。?
2、當(dāng)代碼比較長,特別是有多重嵌套時,為了使層次清晰,應(yīng)當(dāng)在一些段落的?
結(jié)束處加注釋(在閉合的右花括號后注釋該閉合所對應(yīng)的起點(diǎn)),注釋不能?
寫得很長,只要能表示是哪個控制語句控制范圍的結(jié)束即可,這樣便于閱讀。?
3、將注釋與注釋分隔符用一個空格分開,在沒有顏色提示的情況下查看注釋時,?
這樣做會使注釋很明顯且容易被找到。?
4、不允許給塊注釋的周圍加上外框。這樣看起來可能很漂亮,但是難于維護(hù)。?
5、每行注釋(連同代碼)不要超過120個字(1024×768),最好不要超過80?
字(800×600)?。?
6、Java編輯器(IDE)注釋快捷方式。Ctrl+/?注釋當(dāng)前行,再按則取消注釋。?
7、對于多行代碼的注釋,盡量不采用“/*......*/”,而采用多行“//”注釋,?
這樣雖然麻煩,但是在做屏蔽調(diào)試時不用查找配對的“/*......*/”。?
8、注釋作為代碼切換開關(guān),用于臨時測試屏蔽某些代碼。
選中代碼 ctrl+/ 是每一行代碼前面加注釋 //
ctrl+shift+/ 是/* */注釋
取消是同樣的操作,已有注釋的就會取消沒有就會加注釋(前提是你已經(jīng)設(shè)置了快捷鍵,我說的這些是默認(rèn)的快捷鍵eclipse中的)
Java代碼注釋寫的多,會影響到編譯效率,但是不會影響到執(zhí)行效率。
Java代碼是先編譯成字節(jié)碼,然后被JVM解釋執(zhí)行的。
我做了個實(shí)驗(yàn)
TimeDemo 類
import?java.util.ArrayList;
public?class?TimeDemo?{
public?static?void?main(String[]?args)?{
long?start?=?System.currentTimeMillis();
ArrayListInteger?list?=?new?ArrayListInteger();
for?(int?i?=?0;?i?1000000;?i++)?{
list.add(i);
}
long?end?=?System.currentTimeMillis();
System.out.println("本次執(zhí)行耗費(fèi)了"+(end-start)+"毫秒");
}
}
TimeDemo2
import?java.util.ArrayList;
public?class?TimeDemo2?{
public?static?void?main(String[]?args)?{
long?start?=?System.currentTimeMillis();
ArrayListInteger?list?=?new?ArrayListInteger();
for?(int?i?=?0;?i?1000000;?i++)?{
list.add(i);
}
//用java.io生成了很多行的注釋,
//注釋
//注釋
//注釋
//注釋
//注釋
long?end?=?System.currentTimeMillis();
System.out.println("本次執(zhí)行耗費(fèi)了"+(end-start)+"毫秒");
}
}
運(yùn)行結(jié)果
當(dāng)注釋行數(shù)是1~1萬行的時候. 能較快的編譯
當(dāng)注釋行數(shù)達(dá)到1百萬的時候,編譯稍微慢一點(diǎn)
當(dāng)注釋行數(shù)達(dá)到1千萬行的時候, CPU占用100%,卡了進(jìn)1分鐘也沒有編譯完成,只好強(qiáng)行關(guān)閉
結(jié)論:
簡單明了的注釋有助于程序猿對代碼的讀寫
只有當(dāng)注釋行數(shù)極大的時候,才會嚴(yán)重的影響編譯速度。 但不會影響執(zhí)行速度