Java原始碼的折行規則(編碼規範)

wen7_23發表於2010-05-20
[size=medium] 一些企業在招聘程式設計師的時候,總會特意提出一個要求,即“要求具有良好的編碼規範”。確實現在程式開發人員已經不在是單槍匹馬的單幹,而是講究團體作戰。此時就要求團隊內的乘員都可能夠恪守程式碼的編寫規範,這對於乘員之間共享程式碼、排錯等作業都具有非常現實的意義。這在Java語言中當然也不例外。筆者借這次機會,就跟大家分享一下Java原始碼的折行規則。雖然這基本不涉及到功能層面的內容,但是對於提高程式碼的閱讀性卻有不可替代的作用。

一、程式碼的最大長度。

雖然在Java的編譯器中對於程式碼的最大長度沒有硬性的規定。但是如果程式碼的長度太長,超過了編譯器的最當行寬,顯然閱讀起來比較麻煩。為此根據筆者的經驗,通常情況下Java原始碼的行長度不應該大於80個字元。如果超過這個長度的話,在一些開發工具和編輯器上就無法很好的顯示。如需要通過滾動條來顯示後面部分的程式碼。當其他專案成員閱讀這超長的程式碼時,就會看得眼花繚亂。當人的溫飽問題解決了之後,就需要開始注意美觀方面的問題。所以程式開發人員在開發應用程式的時候,要儘量避免書寫長的程式碼。如果程式碼的每行長度確實需要超過80個字元的話(最好將每行程式碼的長度控制在70個字元左右),那麼就需要對程式碼進行分行。

二、在恰當的地方對程式碼進行分行。

筆者建議將Java原始碼每行的長度控制在70個字元、最大不超過80個字元。當超過這個字元長度的時候,開發人員就需要考慮在恰當的地方對他們進行分行處理。不過這個分行也不是說開發人員想在哪裡進行分行就在哪裡進行分行。這個分行是有一定技巧的。雖然這些技巧大部分並不是強制性的規定,但是都是一些專家們的經驗總結,可以提高程式碼的閱讀性。為此筆者希望各位程式開發能夠嚴格的遵守。

技巧一:高層折行優於低層折行。

這個技巧是說,在考慮對程式碼進行折行處理的時候,需要注意程式碼的層次性。如某段程式碼涉及到混合四則運算,而四則運算又有明顯的運算順序,此時對程式碼進行折行時就最好能夠在四則運算的關鍵順序上進行折行處理。如現在有如下的一段程式碼:

Mynum=mynum1*(mynum1+mynue2+mynum3-mynum4)+8*mynum5

如果要對這段程式碼進行折行的話,該在哪個地方加入一個折行符號呢?如果是筆者處理的話,筆者會按如下的格式對程式碼進行折行處理。

Mynum=mynum1*(mynum1+mynue2+mynum3-mynum4)

+8*mynum5

這主要是根據四則運算的運算層次來進行折行的。顯然,*符號的優先順序要比+符號要高。所以在+號前面對其進行折行處理,那麼就可以一目瞭然的反應出程式碼的運算層次。可以大幅度的提高程式碼的閱讀性。所以程式碼折行的第一個技巧就是高層折行優於低層折行。如此的話,可以使得應用程式的結構程式碼更加的清晰,更容易被團隊成員所理解。

技巧二:在運算子前面進行折行處理。

其實在如上的折行技巧中,還隱藏著一個規則,即在運算子之前進行折行。如上例所示,筆者就是在+號前面進行折行,而不是在+號後面進行折行處理。這主要也是考慮到程式碼的可讀性。如上面這個例子中,如果在+號後面進行折行處理的話,則下一行就會給人一種憑空多出來的感覺,顯得程式碼很不連貫。跟這個規則類似,如果在折行處理的時候遇到逗號時,那麼最好能夠在逗號後面進行折行。如在一個方法中,需要傳入5個引數。此時如果程式碼行比較長,那麼就需要在幾個引數之間進行折行處理。此時最理想的折行位置,就是在某個引數的逗號後面。注意,使在逗號後面進行折行,而不是在逗號前面。因為一個引數一個逗號是匹對的。而如果一個逗號加一個引數,則讓人看起來很不舒服。

技巧三:這行程式碼的對起方式。

當不得已對程式碼進行折行處理時,下一行的程式碼應該與其同等級的程式碼行左對齊。如上例所示,在+號前面將某一段四則運算公式進行折行處理的時候,其+號符號已經採取縮排處理。其縮排後的效果就是要與其同等級的程式碼行左對齊。如此的話,明眼人一看就知道這段程式碼採取過折行處理;而且跟上一行程式碼的層次關係。當一段程式碼被分割成三行甚至跟更多行數的時候,這個規則會非常的有用。如果能夠嚴格遵守這個規則,即使將程式碼分割成多行,看起來也不會覺得那麼混亂。反而給人一種比較有層次的感覺。

另外在採取縮排處理的時候,可以利用Tab鍵來提高縮排處理的效率。因為直接按空格的話,有可能空格字元數量不一致,會讓人覺得層次不起,產生比較大的混亂。一般情況下,當程式碼行兩側距離頁邊的距離比較大,看其來不怎麼舒服時,可以在程式碼行中通過插入TAB鍵(會在程式碼行中連續插入8個字元)來提高程式碼的閱讀性,讓程式碼的縮排實現統一。

技巧四:為變數尋找一個合適的位置。

在編寫應用程式時,儘量將變數宣告放置在一個程式碼塊的開始處,也就是說{}花括號的開始位置。雖然說可以在需要使用變數的時候再對其進行宣告。但是筆者不同義如此操作。因為如果在的呢感到使用變數的時候再來宣告變數時,會降低程式碼的可讀性。同理,也需要避免低層宣告與高層宣告重複,這樣會引起程式碼混亂並可能引發程式功能性錯誤。而且這種錯誤在後續的排錯中很難被發現。為此要在應用程式開發的時候就要儘量避免這種錯誤。

在宣告變數的時候,有時候可能程式碼很簡單,生命變數的行總共加起來也不會超過十個字元。此時能否把多個變數的宣告寫在同一行呢?從就技術上來說,這是可行的。也就是說,Java編譯器允許將多個變數定義在同一行上。但是從閱讀性上來說,這並不是很好的做法。筆者的建議是,即使變數定義再簡單,或者變數比較多,也最好分行進行變數的宣告。也就是說,一行宣告一個變數。這可以提高程式碼的可閱讀性。而且有時候往往需要對變數加一個註釋說明變數的用途,如果以行定義一個變數,新增行註釋也相對簡單許多。

總之,以上的這些折行的規則基本上不會影響到程式碼的執行。但是,對於程式碼的維護與後續的排錯、升級、二次開發等等具有不可忽視的作用。而且現在基本上應用程式開發式團隊開發,故大家都遵守同樣的程式碼編寫規範是非常重要的。筆者在開發一個應用程式的時候,事先都會花一定的時間,跟專案成員強調這些折行的規則。目的只有一個,就是提高程式碼的可讀性,便於後續程式碼的共享與維護。畢竟後續面對這些程式碼的,並不是客戶,而是我們自己。我們程式設計師在編寫程式碼的時候,不能夠搬起石頭砸自己的腳。筆者認為,現在一個合格的程式人員,不僅技術功底上要過得硬,而且還必須要遵守這些“無形規則”的約束。難怪現在這麼多企業在挑選程式開發人員的時候,都會註明“良好的編碼規範”。現在對於這些無形中的條條框框,專案經理已經開始重視起來。[/size]

相關文章