養(yǎng)成良好的Linux編碼風(fēng)格
Linux操作系統(tǒng)是一個(gè)開源的操作系統(tǒng),為此你在Linux系統(tǒng)上開發(fā)的一個(gè)工具軟件,包括源代碼,可能其他系統(tǒng)管理員也需要用到。為此在編寫代碼的時(shí)候,就需要遵守一定的規(guī)則。這不僅是為了方便他人的閱讀,也是為了以后自己的維護(hù)與升級考慮。具體的來說,筆者認(rèn)為Linux系統(tǒng)管理員要養(yǎng)成下面的一些好的編碼風(fēng)格。
一、 合理防治函數(shù)開頭的左花括號。
根據(jù)大部分系統(tǒng)管理員認(rèn)可的編碼風(fēng)格,往往將函數(shù)開頭的左括號放到代碼頁的最左邊。要避免將其他的括號(包括左花括號、左括號或者左方括號)放到最左邊。這主要是為了便于閱讀。因?yàn)楹瘮?shù)的主體內(nèi)容往往是有一對花括號括起來的。如果在代碼頁的最左邊只有代表函數(shù)的花括號,那么就可以一目了然的看到函數(shù)的主體。為此這是提高代碼閱讀性的一個(gè)很好的手段。
需要注意的是,這可能跟其他語言的編程風(fēng)格有所差異。如在Java語言或者C語言平臺上,往往將函數(shù)主體開頭的花括號放在函數(shù)的后面。如在main函數(shù)后面會直接使用{這個(gè)左花括號。不過這不利于程序的閱讀,不利于Linux系統(tǒng)管理員找到函數(shù)的主體代碼。為此如果有其他編程語言使用經(jīng)驗(yàn)的系統(tǒng)管理員,***能夠改變這種書寫習(xí)慣。筆者建議,系統(tǒng)管理員還是要將這個(gè)花括號放在最左邊,并保證在整個(gè)代碼中,最左邊出現(xiàn)的花括號都是代碼函數(shù)主體的花括號。
二、 每個(gè)函數(shù)開頭***都有一個(gè)簡短的代表功能的說明。
在Linux的功能代碼中,其各個(gè)功能也都是一個(gè)個(gè)函數(shù)或者程序構(gòu)成的。也就是說,在一個(gè)代碼文件中,可能會有很多個(gè)函數(shù)構(gòu)成。那么這些函數(shù)主要用來實(shí)現(xiàn)什么功能呢?如果不做任何說明的話,那么只有看完函數(shù)的全部代碼之后才能夠了解這個(gè)信息。這對于他人閱讀源代碼會造成比較大的障礙。而且,時(shí)間久了之后,可能連系統(tǒng)管理員自己都不知道這個(gè)函數(shù)時(shí)用來實(shí)現(xiàn)什么功能的。這對于其后續(xù)維護(hù)與升級顯然是不利的。為此筆者建議各位系統(tǒng)管理員,無論是為自己還是為他人,***在每個(gè)函數(shù)或者程序的開頭都寫上一小段注釋。好記性不如爛筆頭,這對于提高代碼的易讀性。另外需要說明的是,由于Linux系統(tǒng)可能對中文的支持并不是很好,為此在寫這個(gè)注釋的時(shí)候,***采用英文書寫。因?yàn)樵谝恍χ形闹С植⒉皇呛芎玫南到y(tǒng)中,這個(gè)中文會顯示為亂碼,此時(shí)就起不到應(yīng)有的作用了。如果不懂英文的話,那么可能只有使用拼音了。當(dāng)然這只是笑話。一般Linux系統(tǒng)工程師對于英文需要一定的了解。因?yàn)長inux操作系統(tǒng)中的幫助文檔都是英文寫的。所以這個(gè)英文的語言關(guān)也是系統(tǒng)管理員必須要解決的關(guān)口。
另外在對函數(shù)進(jìn)行說明時(shí),***還需要著名這個(gè)函數(shù)需要用戶傳入什么參數(shù),會返回什么樣的結(jié)果。以及參數(shù)、結(jié)果的個(gè)數(shù)等等。這對于代碼的編譯與維護(hù)非常有幫助。而且項(xiàng)目團(tuán)隊(duì)中的其他成員如果要引用你這個(gè)函數(shù)的話,那么不需要查看函數(shù)的具體代碼。而只需要查看一些這個(gè)注釋,就可以知道需要傳遞進(jìn)去哪些參數(shù)。這也是提高項(xiàng)目合作效率的一個(gè)手段。
#p#三、 If語句使用要規(guī)范。
在Linux系統(tǒng)中編寫代碼時(shí),IF語句是使用的最多的結(jié)構(gòu)之一。這個(gè)if語句主要用來實(shí)現(xiàn)一些邏輯的判斷。雖然這個(gè)語句本身比較簡單,但是在使用這個(gè)語句時(shí),***也能夠遵守一些規(guī)則。雖然這些規(guī)則主要是從易讀性的角度去考慮的,但是對于編寫一個(gè)準(zhǔn)確的IF結(jié)構(gòu)語句也有所幫助。
如根據(jù)Linux系統(tǒng)的編程習(xí)慣,***不要在IF的條件中進(jìn)行賦值。IF語句需要根據(jù)某個(gè)條件來進(jìn)行判斷該采取什么樣的操作。在這個(gè)條件中,根據(jù)語法是可以在這個(gè)條件中對變量進(jìn)行賦值的。但是這不符合Linux系統(tǒng)下的編程風(fēng)格。筆者建議,***在IF結(jié)構(gòu)外部對變量進(jìn)行賦值,然后再在條件中直接使用這個(gè)變量。這更易于控制IF結(jié)構(gòu)。另外,如果在IF語句中使用嵌套的話,可以使用花括號將嵌套的IF ELSE語句括起來,以利于發(fā)現(xiàn)這個(gè)嵌套語句。在其他應(yīng)用程序編寫過程中,是使用縮進(jìn)的方式來凸現(xiàn)IF嵌套結(jié)構(gòu)的。但是Linux系統(tǒng)管理員更加喜歡使用花括號。雖然這兩個(gè)沒有實(shí)質(zhì)上的區(qū)別,但是筆者還是建議采用花括號。因?yàn)檫@是一個(gè)Linux操作系統(tǒng)業(yè)內(nèi)普遍認(rèn)可的一個(gè)編碼風(fēng)格。
四、 大小寫書寫要規(guī)范。
雖然函數(shù)名或者變量名采用大寫字符或者小寫字符都是允許的。但是在定義這些名字的時(shí)候,大小寫***還是要符合一些常見的規(guī)則。如對于函數(shù)的名字***使用小寫的英文字符。如果有多個(gè)單詞構(gòu)成的話,***使用下劃線來進(jìn)行分割。而不是采用***個(gè)英文單詞大寫的方式。大小寫混用在某些環(huán)境中或許是很不錯(cuò)的解決方式,但是在Linux系統(tǒng)中不行。而對于變量來說,要根據(jù)變量的類型來確定使用小寫字符還是采用大寫字符。一般情況下,如果是系統(tǒng)管理員自己定義的變量,那么***使用小寫字符。如果采用的是系統(tǒng)變量的話,那么可以使用大寫的英文字母。如此的話,一看到變量的大寫還是小寫的狀態(tài),就可以判斷使用的是用戶自定義變量還是系統(tǒng)變量。另外在Linux系統(tǒng)中也需要用到一些常量。根據(jù)大家的編程習(xí)慣,往往利用大寫字符來定義常量。如系統(tǒng)管理員在學(xué)習(xí)其他高手編寫的代碼過程中,可以發(fā)現(xiàn)在枚舉或者宏中都是利用大寫字符來代表常量的。
在確定使用大寫還是使用小寫字符之前,需要明確的一點(diǎn)就是在Linux操作系統(tǒng)中大小寫是敏感的。也就是說,Name與name是代表兩個(gè)不同的變量。為此在系統(tǒng)中規(guī)范大小寫的格式就顯得尤其的重要。由于大小寫敏感,所以在同一個(gè)名字中混用大小寫會讓變量或者函數(shù)的應(yīng)用變得很復(fù)雜。故如果一個(gè)名字有好幾個(gè)單詞構(gòu)成,那么系統(tǒng)管理員要習(xí)慣利用下劃線來進(jìn)行單詞的分割,而不是采用***個(gè)單詞大寫的形式。
#p#五、 代碼該分行是就需要分行。
雖然Linux操作系統(tǒng)的編譯器對于分行沒有嚴(yán)格的要求。如幾個(gè)變量都可以在同一行中定義,或者在同一個(gè)行中對多個(gè)變量進(jìn)行賦值等等。只要采用了合適的分割符,就可以編譯通過并得到正確的執(zhí)行。但是如果系統(tǒng)管理員真的這么做的話,那么筆者告訴你,你會被同行笑話的。因?yàn)檫@使你不專業(yè)的表現(xiàn)。根據(jù)Linux操作系統(tǒng)通用的編程風(fēng)格,編寫代碼時(shí)該分行是就需要分行。
如在變量或者常量定義時(shí),一般都是一行定義個(gè)變量或者常量。在編寫一些復(fù)雜結(jié)構(gòu)語句時(shí),如IF或者循環(huán)結(jié)構(gòu),也往往是采取分行的格式。即使代碼很簡單,一行就可以寫完。但是仍然會根據(jù)其不同的部分,將其分割成兩行甚至多行。這有利于系統(tǒng)管理員閱讀代碼。另在程序的不同部分,也***能夠采取分行的方式來進(jìn)行隔離。如函數(shù)與函數(shù)之間,變量聲明與函數(shù)之間,注釋與代碼之間等等??梢约尤胍坏絻尚械目招?,來提高閱讀的便利性。反正這不會對程序的性能造成影響。
類似的編碼風(fēng)格還有很多。如兩個(gè)不同運(yùn)算級別的操作符號組好不要在同行中出現(xiàn);不要跨行聲明多個(gè)變量,即變量的聲明***放在同一個(gè)地方,以方便同一管理,等等。這些規(guī)則需要系統(tǒng)管理員他人編寫的代碼中去體會與總結(jié)。多看看一些專家級人物寫的代碼,往往可以給我們帶來很大的收獲。
***筆者要說的是,這些規(guī)則并不是強(qiáng)制性的。也就是說你即使不遵守這些規(guī)則的話,Linux系統(tǒng)編譯器也不會認(rèn)為你的代碼有問題,可以正確執(zhí)行。但是每個(gè)行業(yè)除了要遵守一些強(qiáng)制的法律法規(guī)之外,還需要遵守一些行業(yè)性規(guī)范。而這些編碼的風(fēng)格就是Linux操作系統(tǒng)的行業(yè)性規(guī)范。如果系統(tǒng)管理員不遵守的話,可能會被大家排斥。所以,系統(tǒng)管理員***還是花點(diǎn)時(shí)間和精力去學(xué)習(xí)這些行業(yè)規(guī)范。
【編輯推薦】