Java/編程規範

維基教科書,自由的教學讀本
跳至導覽 跳至搜尋

命名法[編輯]

對於變量、數組、方法/函數、類和對象,如何規範地進行命名至關重要,尤其是當程序規模擴大,變量數量激增的情況下。

比較著名的命名規則首推匈牙利命名法,這種命名方法是由Microsoft程式設計師查爾斯·西蒙尼(Charles Simonyi) 提出的,C語言中常用此種命名法。標識符的名字以一個或者多個小寫字母開頭作為前綴;前綴之後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變量的用途。例如:lpszStr, 表示指向一個以'\0'結尾的字符串(sz)的長指針(lp)變量。

「駱駝」(Camel)命名法,或者稱「駝峰」命名法近年來越來越流行,在許多新的函數庫和Java這樣的平台下使用得當相多。其特點是第一個單詞全部小寫,以後的單詞首字母大寫,這樣看起來就像駱駝的背一樣,有高低起伏。

帕斯卡(Pascal)命名法與駱駝命名法類似。只不過駱駝命名法是第一個單詞首字母小寫,而帕斯卡命名法則是第一個單詞首字母大寫。

另一種流行的命名規則稱為下劃線命名法,即用下劃線隔開每個單詞。下劃線法是隨着C語言的出現流行起來的,在UNIX/LIUNX這樣的環境,以及GNU代碼中使用非常普遍。

出於很多原因,Java設計之初就採用駝峰命名法,而且絕大多數Java程式設計師也在他們的代碼中遵循這一規範。

駝峰命名法有如下幾種規範:

  • 採用有意義的英文單詞或縮寫不推薦使用拼音、無意義單詞、單個字母、數字編號
  • 變量由多個英文單詞構成,不間隔下劃線、短橫線、點號或者其他符號
  • 第一個單詞全部小寫,從第二個單詞開始,首字母大寫,以斷開每個單詞
  • 變量的單詞應能夠清晰、準確地表達此變量的意義作用

比如,現在我們需要用一個變量表示中國的人口,則可以取名為:populationOfChina。若表示河南省的國民生產總值gdpOfHenan,這裏為了清晰表示,GDP使用小寫。有時甚至可以是一句話:IfTheInternetIsAccessible來表示網絡可達狀態的布爾變量。

代碼書寫[編輯]

良好的代碼書寫習慣可以增強代碼可讀性。在團隊開發過程中,代碼書寫規範的一致性是有效交流協作的前提。

縮進與換行[編輯]

縮進與換行可以增強代碼的可讀性。 縮進的原則:

  • 如果前一行是左大括號(「花括號」{),一般這一行就要相對括號的位置縮進一個單位。
  • 如果前一行為if,for,while、else、do,而下一行不是花括號,則下一行必須縮進。
  • 縮進使用Tab鍵(位於鍵盤上Q的左側),而不應使用空格。這樣不僅便利,而且可以達到距離的統一,空格的數目難以控制,且無法被編輯器識別為縮進。

換行的原則:

  • 在分號之後換行
  • 在表示結構塊的大括號之後換行:{ 換行 換行 } 換行
  • if,for,while、else、do之後換行

空格[編輯]

空格的使用可以使一個語句看起來不那麼擁擠,各個變量符號能夠清晰分辨。

空格的使用方法不一,以下方式僅供參考:

  • 在=,+,-,*,/,前後各一個空格,數字前後應有一個空格,如:
int a = 10 + b;
  • 在小括號內側使用一個空格,如:
while( i = 1 )

空行[編輯]

空行起到劃分區域的作用,這使代碼閱讀起來更加容易,能夠一眼看出代碼由哪幾個部分組成。

括號[編輯]

括號對於代碼書寫的正確性至關重要。為確保括號成對不至於缺失,可以採用下面的方法: 方法一:每次書寫括號時同時寫下一對括號,這樣就不存在忘記寫末尾括號的問題了。 方法二:使用IDE的括號匹配和自動完成功能,在Eclipse中,只要寫下一個括號,程序就能自動補全另一半,非常便利。

注釋[編輯]

注釋能夠幫助程序被更好的理解,因此清晰、簡潔、明白的注釋是良好代碼風格的體現。

注釋傳達的信息包括:

  • 開頭介紹代碼的作者、日期、版本
  • 介紹各部分各自的作用
  • 介紹解決問題的過程

Java的注釋方法有兩種,皆繼承自C++。

第一種是行注釋,C++採用的注釋方法,用兩個斜槓來表示後面的內容一直到行尾都是注釋內容。

//注释可以放在文档的开头
//每一行的开头都要有双斜杠

public class Wikibooks{
	//也可以放在代码中间
	public static void main(String args[]){			//可以放在行末
		System.out.println("Hellow Wikibooks!");	//用Tab保持对齐
	}
}

有很多原因使這種注釋方法看起來更加「現代」:它容易輸入,且不容易出錯。

第二種是區域注釋,C語言採用的注釋方法,/*與*/中間的內容將作為注釋,當無法配對時,*/被看作非注釋,而/*以後的全部內容則被看作注釋。

/*******************
 *通常人们在文档开头   *
 *做一个注释         *
 *******************/

public class Wikibooks{
	/*也可以放在代码中间*/
	public static void main(String args[]){			/*可以放在行末*/
		System.out.println("Hellow Wikibooks!");	/*用Tab保持对齐*/
	}
}

這種注釋的缺點之一在於當你不小心只刪除了一對注釋符號中的一邊,就有可能產生錯誤。另外,輸入也很麻煩。