4 – 縮排
推薦使用4個空格做為縮排單位。
關於使用空格
或者tab
並沒有決定性的要求。tab
需要設定為8個空格而不是4個。
Q: 換行、縮排 區別
A: 程式碼巢狀、內部需要縮排。比如方法的實現和if的內部,如下:
if (boolenArg) {
doSomething(); //這叫縮排 4個空格
}
var longName1 = longName2 + longName3 + longName4 + longName5
+ longName6; //這叫換行 太長了換了第二行
4.1 行長
避免超過80
個字元的行,因為很多終端和工具不能很好的處理它們。
Note: 註釋中使用的示例應該具有較短的行長, 一般不超過
70
個字元
4.2 換行規則
當一個表示式不適合單獨一行時,根據以下一般原則將它分解:
- 逗號之後
- 操作符前面
- 優選在高階別的運算後面換行
- 將新行與上一行中相同級別的表示式的開頭對齊。比如
(
、)
、[
、]
- 如果上述規則導致程式碼混淆或超過右邊的邊界,則只需縮排
8
個空格即可。
參考案例:
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5); // 逗號後面 8個空格
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpiression3)); // 16個空格,因為是方法內部的函式
下面是2個算術運算的換行例子。第一個是優選的,因為它換行是在高階別的運算外面。
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longName6; //優選 操作符前面
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longName6; //避免
下面是2個縮排方法宣告的示例。第一個是常規換行。第二個例子中如果按照常規換行會太
緊貼右邊,所以只前置了8個空格。
//常規換行 括號對齊
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
//do something
}
// 縮排8個空格 避免很長的縮排.
// 這種情況,如果也使用括號對齊的話,右邊都沒辦法寫程式碼了
private static synchronized horkingLongMethodName (int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
// do something
}
if
表示式的換行應該使用8個空格,因為4個空格會讓表示式的內部的程式碼很不容易區分,例如:
// 不要使用這種縮排
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { //錯誤寫法
doSomethingAboutIt(); // 這行很容易被忽略
}
// 推薦使用
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
// 或者使用
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
以下是三種可接受的方式來設定三元表示式的格式:
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;