程序猿與注釋的相愛相殺
原創(chuàng)【51CTO.com原創(chuàng)稿件】程序猿作為地球上最為神奇的物種之一,干過不少驚天地泣鬼神的雄圖大業(yè),同樣給人們留下了不少茶余飯后談?wù)摰墓?。在普通人們眼中,程序猿是神秘的,是不修邊幅的,是沒日沒夜加班的工作狂;但在程序猿眼中,自己是帥氣的,拯救世界的,一枝梨花壓海棠的科技先驅(qū)。
普通人眼中的程序猿
程序猿眼中的程序猿
程序猿的豐功偉績,最直接的體現(xiàn)就是像藝術(shù)品一樣的代碼,行云流水、一氣呵成。但不是所有的程序猿都能看懂別人寫的代碼,就像不是所有的人都會欣賞藝術(shù)品一樣。畢竟代碼是用于業(yè)務(wù)生產(chǎn),為了讓別人能夠更好理解自己的作品,也為了讓自己能夠更深刻的記住創(chuàng)作藝術(shù)品的過程,程序猿對自己的作品進(jìn)行了加工——注釋。
注釋,顧名思義,就是對代碼進(jìn)行釋義。注釋不是寫給機(jī)器的語言,不參與到代碼的編譯、連接、工作中去,而是寫給人看的內(nèi)容。眾所周知,代碼,是讓計算機(jī)按照人的預(yù)想進(jìn)行工作,注釋并沒有讓代碼運(yùn)行得更加快,那么注釋到底扮演者什么樣的角色呢?程序猿和注釋之間又有怎樣的故事呢?
注釋是什么?
注釋就是對代碼的解釋和說明,其目的是讓人們能夠更加輕松地了解代碼。注釋是編寫程序時,寫程序的人給一個語句、程序段、函數(shù)等的解釋或提示,能提高程序代碼的可讀性
為什么寫注釋?
1.好記性不如爛筆頭
用于業(yè)務(wù)生產(chǎn)的程序,通常都不是寥寥幾語了事,而是大篇大篇的代碼,更有甚者,代碼行數(shù)千萬級別。雖說現(xiàn)在編程語言越來越高級、方便,對程序員越來越友好,大大縮小了代碼行數(shù),但功能全面的、性能穩(wěn)定的代碼依然有不小的篇幅。程序員在寫代碼的時候,語法規(guī)則雖然不難、不多,但是參數(shù)、函數(shù)、變量等等自定義的元素依然有很大的變化。代碼再有規(guī)則,但畢竟不是人類語言,不能一眼看明,再加上篇幅巨大,難免會有寫了后面往前面的尷尬處境。再加上前后代碼寫的時間有差異,程序員想要記住自己所寫的所有函數(shù)、變量、參數(shù),也是很困難的。與其花時間記住這些函數(shù)、參數(shù),不如一行注釋來得更快。來看看51CTO社群開發(fā)者是怎么說的吧:
PHP-小星星-廣州:曾經(jīng),一個東西,寫的時候思路清晰,然后半年后愣是沒看懂。
PHP-Coeus-安徽:別說半年了,我上周寫的一個方法,現(xiàn)在都已經(jīng)不知道上周開了什么腦洞。
寫代碼要和寫注釋同步進(jìn)行,對作品進(jìn)行闡述,這樣不但可以預(yù)防寫后忘前的尷尬處境,還能讓自己的創(chuàng)造思路更加清晰。
古人云:好記性不如爛筆頭。
2.我為人人,人人為我
書寫篇幅巨大的代碼是一個宏偉的工程,這樣的工程通常不是一己之力能夠完成,眾人拾柴火炎高,眾人劃槳開大船。談及到協(xié)同工作,首先要一個共同的標(biāo)準(zhǔn),艄公多了打翻船的道理大家都明白。51CTO開發(fā)者社群Web-白楊-鄭州認(rèn)為:一般立項的時候有規(guī)范文檔,對象、函數(shù)聲明一系列都要求一致。
但每一個程序員對藝術(shù)的理解不一樣,創(chuàng)造藝術(shù)品的方式和過程也會大相徑庭。但大家都是一起干活,工期到了拿不出產(chǎn)品難免又要被工頭教訓(xùn)。
程序員:“怎能讓自己的藝術(shù)屈服于生活,簡直是侮辱。”
工頭:“好好好,聽你的,只要你不寫 :(){ :|:& };: (fork炸彈)。但是你總得讓你的小伙伴能和你一起干活吧,你的小伙伴得知道你干了啥是吧。”
程序員:“那我寫好注釋,他們就能領(lǐng)悟到我的藝術(shù)了吧。”
工頭:“小伙子不錯,覺悟很高,中午盒飯加雞腿。”
“注釋寫的多少、寫的是否詳細(xì),也影響了使用、修改你代碼的人員的門檻。”51CTO開發(fā)者社群PHP-Coeus-安徽的這個看法被很多開發(fā)者認(rèn)同。為了更好的協(xié)同開發(fā),和工作的小伙伴能夠一起愉快的玩耍,寫一個清楚明白的注釋是非常重要的,相愛沒有那么容易,每個程序員有他的怪癖。如果每一個參與到項目開發(fā)中的程序員都能將代碼用心寫好,這無疑是協(xié)同開發(fā)一個利好因素。而且,你的注釋也會讓對你代碼頂禮膜拜的初學(xué)者獲益匪淺。
古人亦云:我為人人,人人為我。
3.前人栽樹,后人乘涼
維護(hù)過別人代碼的程序員,都應(yīng)該經(jīng)歷過一種切膚之痛——因為沒有注釋或者注釋不清楚而導(dǎo)致完全無法理解這代碼。創(chuàng)作者的藝術(shù)品,接盤俠的毀滅日。
接盤俠眼中的代碼
其實這并不夸張,因為編程語言的特點,每位藝術(shù)大師都有足夠的發(fā)揮空間,但天馬行空的想象確實會讓后人難以琢磨。簡直就是前人栽樹,后人吃土的節(jié)奏。
誰也不想看到這樣的代碼,單單是要看懂就廢了九牛二虎之力,分分鐘吐血的節(jié)奏啊。
程序員:“我去,這段代碼什么意思?這個調(diào)用是想干嘛?哪里又冒出來這么個玩意兒?老板,我想死。”
工頭:“想死都不行,你知道該怎么寫代碼了么?”
程序員:“我知道了,我一定要寫好注釋,為以后的工作鋪平道路。”
工頭:“嗯嗯,小伙子很有遠(yuǎn)見,看來以后是要接我的班了。”
程序員:“我接了你的位置,那你呢?”
工頭:“我去做產(chǎn)品經(jīng)理。”
程序員:“。。。。。。。。。。。。。。。。”
51CTO社群開發(fā)者Java-小源-珠海認(rèn)為:自己寫的方法會給點注釋,不然到時別人要用時還需要費(fèi)時間去理解。
寫好注釋,會為業(yè)務(wù)的發(fā)展和程序的迭代提供不少便利,誰都不想當(dāng)接盤俠,那就誰也別做隔壁老王。
古人還云:前人栽樹,后人乘涼。
當(dāng)前IT行業(yè)的發(fā)展趨勢,系統(tǒng)的迭代、程序的重構(gòu)、工作的交接、對新進(jìn)人員的培訓(xùn)等事情越來越多,這些事情無一例外都會把已經(jīng)寫過的代碼重新或者重復(fù)閱讀,如果在初始編寫代碼時,就做到完整、清晰明了的代碼注釋,對后續(xù)工作會有巨大的幫助。不僅提高工作效率,還能加固小伙伴之間的友誼。事實上,就算只是自己看自己的代碼,如果有注釋,也能加深印象,縮短代碼查找時間。因此,任何開發(fā)人員,都應(yīng)該養(yǎng)成良好的代碼注釋習(xí)慣。
如何寫出漂亮的注釋
同代碼一樣,漂亮、有用的注釋會給藝術(shù)品錦上添花。要寫出好的注釋,一樣需要技巧。51CTO開發(fā)者社群小伙伴給出很多建議。
- 首先,注釋是給人看的,要能讓人一眼明白其中的含義,不能拐彎抹角。
PHP-Coeus-安徽:一般按照規(guī)范來,看變量名,基本上都會知道方法是做什么的,變量是什么,需要注釋的內(nèi)容就是,為什么我要在這里調(diào)用另一個方法,為什么我要修改這個class狀態(tài)值。
后端接口開發(fā)-劉聲杰-成都:我的注釋就是:首先一定要寫明白這個是做什么的,而且是什么時候?qū)懙?,然后如果刪除了,一定要添加一個刪除標(biāo)簽說明,尤其對于返回值,一定要說明每種情況,對于已經(jīng)有替代方法的,一定要表明優(yōu)秀用,每個參數(shù)的類型是什么等等。
- 其次,注釋可以進(jìn)行一個分類。
Web-白楊-鄭州:我習(xí)慣點亮以后,開頭注釋一個目錄,然后分ABC種類標(biāo)色,A類是加進(jìn)去肯定跑不動,B類是加進(jìn)去能跑一半 ,C類是我都不知道的鬼代碼。。。。
這樣一個分類,可以幫助代碼維護(hù)者更好的閱讀代碼。
- 第三,注釋也要恰到好處。
PHP-Coeus-安徽:之前我?guī)б粋€實習(xí)生和他說 ,你要有注釋的習(xí)慣,然后看他的代碼: $a = $b+$c; // 做b、c加法。
這就看得我尷尬癌犯了,這強(qiáng)迫癥晚期了吧。要做合適的注釋,而不是所有的代碼都進(jìn)行了注釋,這增加了工作量,卻也沒有對代碼維護(hù)者有任何幫助。
- 第四,注釋可以保存代碼痕跡。
程序員在修改了代碼以后,未測試之前,代碼的質(zhì)量是無法得到有保證的,有可能會被改得更糟糕,這時可能需要恢復(fù)到之前的代碼,如果你把之前的舊代碼刪除了的話,工作會變得復(fù)雜起來。
后端接口開發(fā)-劉聲杰-成都:重構(gòu)部分代碼的時候,有時會保留部分之前的代碼,注釋掉,直到運(yùn)行穩(wěn)定以后,才慢慢的將其刪除掉,如果以后需要恢復(fù),就看SVN記錄。
現(xiàn)在讓我們來看看漂亮的注釋到底什么樣子:
Java-勇波-北京
PHP-coeus-安徽
【寫在最后】
羅馬不是一天建成的,寫注釋也是一個循序漸進(jìn)的學(xué)習(xí)過程。寫注釋和寫代碼一樣,需要多加練習(xí),掌握一套自己熟練的注釋方法。同時,在參考大神的代碼時,也可以借鑒大神寫注釋的方法,從而提升自己寫注釋的功力。
在協(xié)同工作中,更是需要和項目組的成員多溝通,練習(xí)一套通俗易懂,大家都能看明白的注釋。注釋也是代碼中不可缺少的一環(huán),各位一定不能掉以輕心,能夠?qū)懗銎恋淖⑨?,也是一位程序員優(yōu)良素質(zhì)的體現(xiàn)。
如有任何疑問,歡迎留言,也可以加5CTO開發(fā)者QQ群交流,群號542270018。
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】