俗話說,字如其人,即通過書寫行為,可以投射出人的性格、心理、情緒、能力等方面的信息。對于程序員來說,代碼風(fēng)格就像程序員的書法。代碼并不僅僅寫給計算機(jī)讀,也給人讀。不能被別人讀懂的代碼,對于找bug、團(tuán)隊合作以及代碼長期維護(hù)都有著巨大的消極影響。對于初學(xué)者,往往覺得代碼能跑、沒bug就好了。事實上,規(guī)范是一種習(xí)慣,代碼規(guī)范要從初學(xué)抓起。
關(guān)于命名。你的程序,該不會還叫未命名i吧?對于程序猿,上了大學(xué)以后,詞典早已不是英語學(xué)科的專利了,不知道有多少單詞,都是在寫代碼命名時學(xué)到的。名字,即標(biāo)識符,包括變量名、函數(shù)名、宏名、常量名,甚至文件名。一般來說,對于名字,我們要求它簡潔、易記、能夠拼讀,還要能代表一定的含義。
規(guī)則如下:
1、命名風(fēng)格應(yīng)該保持一致。即運用同一套命名法則。由多個單詞復(fù)合時,邏輯斷點應(yīng)做特殊處理以示分隔,如大寫、下劃線等。詳情可百度匈牙利命名法、駱駝命名法、帕斯卡命名法。此外,單詞縮寫應(yīng)符合人們的習(xí)慣。
2、函數(shù)名多采用動作性名詞。
3、全局變量使用具有說明性的名字,而局部變量則用短名字。
4、標(biāo)識符應(yīng)用含義正確的英文單詞或單詞組合命名,切忌用漢語拼音!!
5、不要出現(xiàn)名字相同的全局變量和局部變量,盡量避免僅用大小寫區(qū)分的兩個名字。
關(guān)于函數(shù)封裝。以C語言為例,對于初學(xué)者,很容易一個main函數(shù)寫到底,重復(fù)使用的代碼,就復(fù)制一遍再改改。然而,當(dāng)我們進(jìn)入后階段的學(xué)習(xí)時,這樣的做法就再也無法滿足我們的需求了。不停地復(fù)制會讓代碼變得冗長且不易讀,出了bug不僅不好找還很難修改。因此,我們應(yīng)當(dāng)從一開始就養(yǎng)成函數(shù)封裝的意識,將需要多次調(diào)用的功能封裝成函數(shù),這樣既簡潔,又美觀。類似的還有利用宏給數(shù)起名字,如此能達(dá)到易修改,易調(diào)整的效果。
關(guān)于表達(dá)式。大家一定聽過代碼界的甜咸豆腐花之爭——括號跟在語句后還是獨占一行。其實,這也沒什么好爭的,只是習(xí)慣問題,但無論如何,同層次對齊、異層次縮進(jìn)(Tab)和語句換行都是必要的。否則,你的代碼很容易看起來像一團(tuán)漿糊。此外,在一些情況下,我們應(yīng)該利用括號,排除表達(dá)式的二義性。代碼應(yīng)當(dāng)清晰易讀,而不僅僅追求簡短巧妙。
關(guān)于注釋。注釋也是程序新手容易忽略的一點,即使知道它的重要性,也還是有許多新手忽略它。注釋是幫助程序讀者的一種手段,最好的注釋是簡潔地點明程序的突出特征,或提供概括說明。不僅注釋給別人看,也是注釋給自己看。注釋包括序言注釋、功能注釋和語句注釋。
注釋的原則如下:
1、不要注釋過于顯然的東西。雖然注釋很重要,但廢話也是要不得的。
2、請給函數(shù)和全局?jǐn)?shù)據(jù)加以注釋。它們是理解的關(guān)鍵。
3、不要試圖把地溝油注釋成食用油,當(dāng)一部分代碼很混亂時,請重寫它。
4、注釋不應(yīng)與代碼矛盾。
5、不要添亂和啰嗦。
上面只列舉了初學(xué)者最容易忽略也最應(yīng)當(dāng)注意的幾點,還有更多細(xì)節(jié),舉不勝舉,需要時大家在編程論壇、博客或者網(wǎng)站上都可以學(xué)習(xí)到。我們需要明確,代碼風(fēng)格因人、因語言而異。但是,有一些規(guī)則,是所有的程序設(shè)計語言都應(yīng)該遵守的。代碼規(guī)范是一種習(xí)慣,一旦好習(xí)慣成自然,我們就能自動照顧到許多細(xì)節(jié)問題,既降低了程序的錯誤率,也有利于與其他程序員的交流合作。而一旦壞習(xí)慣成自然,就像人們寫字的壞習(xí)慣一樣難以改變。一句話,代碼規(guī)范應(yīng)從初學(xué)抓起。
參考資料:中國人民大學(xué)信息學(xué)院程序設(shè)計課件
本人初學(xué)時無縮進(jìn)的代碼
加入注釋及宏定義的代碼
函數(shù)的封裝
作者信息:陳潔婷 中國人民大學(xué)信息學(xué)院 chenjieting1208@163.com