Like Share Discussion Bookmark Smile

J.J. Huang   2020-04-30   Java   瀏覽次數:

《阿里Java開發手冊》 | 編程規約 - 程式碼格式

【強制】如果是大括號內為空,則簡潔地寫成{}即可,大括號中間無需換行和空格;如果是非空程式碼塊則:

  • 1.左大括號前不換行。
  • 2.左大括號後換行。
  • 3.右大括號前換行。
  • 4.右大括號後還有 else 等程式碼則不換行;表示終止的右大括號後必須換行。

【強制】左小括號和右邊相鄰字符之間不出現空格;右小括號和左邊相鄰字符之間也不出現空格;而左大括號前需要加空格。詳見第 5 條下方正例提示。
反例:if (空格 a == b 空格)


【強制】if/for/while/switch/do等保留字與括號之間都必須加空格。


【強制】任何二目、三目運算符的左右兩邊都需要加一個空格。
說明:包括賦值運算符=、邏輯運算符&&、加減乘除符號等。


【強制】採用 4 個空格縮進,禁止使用 tab 字符。
說明:如果使用 tab 縮進,必須設置 1 個 tab 為 4 個空格。 IDEA 設置 tab 為 4 個空格時,請勿勾選 Use tab character 。而在 eclipse 中,必須勾選insert spaces for tabs
正例:(涉及 1-5 點)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
    // 縮進 4 個空格
    String say = "hello";
    // 運算符的左右必須有一個空格
    int flag = 0;
    // 關鍵詞 if 與括號之間必須有一個空格,括號內的 f 與左括號,0 與右括號不需要空格
    if (flag == 0) {
        System.out.println(say);
    }

    // 左大括號前加空格且不換行;左大括號後換行
    if (flag == 1) {
        System.out.println("world");
        // 右大括號前換行,右大括號後有 else,不用換行
    } else {
        System.out.println("ok");
        // 在右大括號後直接結束,則必須換行
    }
}

【強制】註解的雙斜線與註解內容之間有且僅有一個空格。
正例:

1
2
// 這是示例註解,請注意在雙斜線之後有一個空格
String commentString = new String();

【強制】在進行類型強制轉換時,右括號與強制轉換值之間不需要任何空格隔開。
正例:

1
2
long first = 1000000000000L;
int second = (int)first + 2;

【強制】單行字符數限制不超過 120 個,超出需要換行,換行時遵循如下原則:

  • 1.第二行相對第一行縮進 4 個空格,從第三行開始,不再繼續縮進,參考示例。
  • 1.運算符與下文一起換行。
  • 1.方法調用的點符號與下文一起換行。
  • 1.方法調用中的多個參數需要換行時,在逗號後進行。
  • 1.在括號前不要換行,見反例。

正例:

1
2
3
4
5
6
StringBuilder sb = new StringBuilder();
// 超過 120 個字符的情況下,換行縮進 4 個空格,並且方法前的點號一起換行
sb.append("zi").append("xin")...
    .append("huang")...
    .append("huang")...
    .append("huang");

反例:

1
2
3
4
5
6
7
StringBuilder sb = new StringBuilder();
// 超過 120 個字符的情況下,不要在括號前換行
sb.append("you").append("are")...append
    ("lucky");
// 參數很多的方法調用可能超過 120 個字符,逗號後才是換行處
method(args1, args2, args3, ...
    , argsX);

【強制】方法參數在定義和傳入時,多個參數逗號後邊必須加空格。
正例:下例中實參的 args1 ,後邊必須要有一個空格。

1
method(args1, args2, args3);

【強制】IDE 的text file encoding 設置為UTF-8; IDE 中文件的換行符使用Unix 格式,不要使用Windows 格式。


【推薦】單個方法的總行數不超過 80 行。
說明:除註解之外的方法簽名、左右大括號、方法內程式碼、空行、回車及任何不可見字符的總行數不超過80 行。
正例:程式碼邏輯分清紅花和綠葉,個性和共性,綠葉邏輯單獨出來成為額外方法,使主幹程式碼更加清晰;共性邏輯抽取成為共性方法,便於復用和維護。


【推薦】沒有必要增加若干空格來使變數的賦值等號與上一行對應位置的等號對齊。
正例:

1
2
3
4
int one = 1;
long two = 2L;
float three = 3F;
StringBuilder sb = new StringBuilder();

說明:增加sb 這個變數,如果需要對齊,則給one、two、three 都要增加幾個空格,在變數比較多的情況下,是非常累贅的事情。


【推薦】不同邏輯、不同語義、不同業務的程式碼之間插入一個空行分隔開來以提升可讀性。
說明:任何情形,沒有必要插入多個空行進行隔開。


心得

看完這篇「程式碼格式」後,發現這部分的小細節太多了,基本上只要照著IDE預設的coding style,大致上都是符合規範的。

如果因為團隊開發上的統一,其實就是自訂好coding style後,大家同步套用,這樣在開發維護上就可以擁有很好的規範了。

結語

文章越看越多,技術越學越多,就會發現自己的不足;技術學到後面都會想要將基礎再重新在打得更加扎實。

以前在開發覺得理所當然的事情,例如:命名規則、命名規範,照著別人怎麼說就怎麼做的想法,並沒有好好去想為什麼要這樣設計和規範。
於是乎同事們推薦《阿里巴巴Java開發手冊》來做閱讀,書中提到種種規範《正確範例》、《錯誤範例》還有解釋定義說明;我相信在閱讀完這一系列後,一定會更加扎實且實在。

如對此書有興趣,建議去購買官方認證的書籍,給予官方支持。

註:如有侵權,通知即刪。


註:以上參考了
Alibaba-Java-Coding-Guidelines Github
Alibaba-Java-Coding-Guidelines English Version