Java編程風格學習(二)


二、格式規范

在上一篇的Java編程風格學習(一)中我們講述了在Java編碼中的一般原則,雖然這些原則並不涉及具體的代碼規范,但是這些原則卻是我們在Java開發過程中所應該遵循的規范與思想。今天我們將學習一些涉及具體代碼書寫的格式規范。

(一)縮進嵌套的代碼

為了增強代碼的可讀性,我們常常把一些單獨的語句組織成語句塊,並對各塊統一縮進使之與周圍代碼分開。

1如果我們使用開發環境,則我們可以使用開發環境提供的縮進樣式。但是如果我們是手寫代碼,應該使用兩個空格縮進。

class MyFuction {
··void function(int arg) {
····if (arg < 0) {
······for (int i = 0; i <= arg; i++) {
········//  ...
······}
····}
··}
}

2、塊語句起始端的大括號應該放在引入塊語句那一行的最后,結束端的大括號要獨占一行,並且與引入嵌套語句那一行的第一個字母對齊。我們日常使用的代碼規范如下:
類定義:

public class MyClass {
  ···
}

內部類定義:


public class OuterClass {
  ···
  class InnerClass {
    ...
  }
}

方法定義:

void method(int j) {
  ···
}

for循環語句:

for (int i = 0; i <= j; i++) {
  ···
}

if-else語句:

if (j < 0) {
  ···
}
else if ( j > 0) {
  ···
}
else {
  ···
}

try,catch,finally塊:

try {
  ···
}
catch {
  ···
}
finally {
  ···
}

switch語句:

switch (value) {
  case 0:
    ···
    break;
  default:
    ···
    break;
}

while語句:

while (a < b) {
  ···
}

do-while語句:

do {
  ···
} while (a < b);

為了提高一個團隊的工作效率,不要讓每個組員任意選擇各自代碼里的縮進量及樣式,應該制定統一的一套標准的縮進規則,並且確保團隊里的每個人都遵循這個標准。

(二)斷開長句

盡管在窗口化的現代編輯器中,可以利用橫向滾動條來閱讀很長的單行代碼。但是打印機對於超過它最大打印寬度的語句,就會把它們截斷、換行或者打印在不同的頁上。因此,要把每行代碼的長度限制在打印環境所支持的最大寬度之內,這個值一般是80或者132個字符。

1不要把多個語句放在同一行里以免超過最大可接受寬度。應該一條語句放置在一行里。

//  這樣寫太長
double x = Math.random(); double y = Math.random();

//  應該一句占一行
double x = Math.random();
double y = Math.random();

2如果一行代碼中包含了復雜的表達式,就應該把它拆分為幾個短小的子表達式,每個子表達式的運算結果存儲在一個臨時變量里,並且單獨放置在一行。

//  這樣的表達式太長
double length = Math.sqrt(Math.pow(Math.random(),2.0),Math.pow(Math.random(),2.0));

//  應該按下面這樣拆分
double x = Math.pow(Math.random(),2.0);
double y = Math.pow(Math.random(),2.0);
double length = Math.sqrt(x + y);

(三) 使用空白

空白就是頁面上沒有可見字符的區域。代碼里如果空白太少就會不易閱讀和理解,所以應該使用足夠多的空白把方法、注釋、代碼塊和表達式展示清楚。

1以下情況使用單空白來分隔:
(1)右括號")"或者緊隨其后的關鍵字;關鍵字和緊隨其后的左括號"("或者"{";右括號")"和緊隨其后的左括號"{";其實細心的讀者會發現在上述內容的介紹中已經應用了這些規范,在此就不贅述了。

if (j < 0) {
  ···
}
else if ( j > 0) {
  ···
}
else {
  ···
}

(2)、除了"."之外的運算符與其前后的表達式之間。

double length = Math.sqrt(x * x + y * y);
double x = length > 0.0 ? (x / length) : x;

2以下情況應該使用空行來分隔:
(1) 每個邏輯上獨立的方法實現之間

void handleInfo(Message message) {

  DataInput content = message.getDataInput();
  int messageType = content.readInt();
  
  switch (messageType) {
    
    case warning:
      ...
      break;
      
    case error:
      ...
      break;
      
      default:
        ...
        break;
  }
}

(2) 定義類或者接口時,每個成員之間使用空行

public class Car {
  
  class InnerCar {
    ...
  }
  
   private Bar bar;
   
   Foo(Bar bar) {
     this.bar = bar;
   }
}

(3) 源文件中,每個類和接口的定義之間要使用空行

interface Paly {
  ...
}
  
public class Person implements Play{
  ...
}
(四)不要直接使用Tab控制符 > 不同的環境對Tab控制符的解釋也是不同的,代碼的格式在原來的編輯環境下可能正確無誤,但是如果放到另一個對Tab控制符有不同解釋的系統中,可能格式混亂、無法閱讀。

為了避免出現以上的情況,我們應該使用空格來縮進代碼。在一個團隊中,應該設置團隊通用的縮進標准,並且團隊里的所有人都嚴格遵守這個標准。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM