風格指南

縮排

語言

每個縮排層級為 2 個空格。不使用 Tab 鍵。因此,不要像這樣縮排

// wrong!
class Foo {
    def fourspaces = {
        val x = 4
        ..
    }
}

您應該像這樣縮排

// right!
class Foo {
  def twospaces = {
    val x = 2
    ..
  }
}

Scala 語言鼓勵大量巢狀範圍和邏輯區塊(函式值等)。對自己好一點,不要因為開啟新區塊而對自己進行語法懲罰。對於來自 Java 的人來說,這種風格需要一點時間適應,但這非常值得。

換行

有時候單一表達式會長到無法限制在單一行內而難以閱讀(通常長度超過 80 個字元)。在這種情況下,建議的做法是將表達式拆分成多個表達式,並將中間結果指定給值。不過,這並不總是實用的解決方案。

當絕對有必要將表達式換到多行時,每一行都應該比第一行縮排兩個空格。另外請記住,Scala 要求每一行「換行」都有一個未關閉的括號,或以中綴方法結束,其中未提供正確參數

val result = 1 + 2 + 3 + 4 + 5 + 6 +
  7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 +
  15 + 16 + 17 + 18 + 19 + 20

沒有這個尾隨方法,Scala 會在預計換行的行尾推論一個分號,有時會在編譯時出錯,甚至連警告都沒有。

帶有多個參數的方法

當呼叫需要多個參數(範圍在五個以上)的方法時,通常有必要將方法呼叫換到多行。在這種情況下,將每個參數放在一行,從目前的縮排層級縮排兩個空格

foo(
  someVeryLongFieldName,
  andAnotherVeryLongFieldName,
  "this is a string",
  3.1415)

這樣一來,所有參數都會對齊,但如果你稍後變更方法名稱,就不需要重新對齊。

應該非常小心避免在行尾進行這種呼叫。更具體來說,當每個參數都必須縮排超過 50 個空格才能對齊時,應該避免這種呼叫。在這種情況下,呼叫本身應該移到下一行並縮排兩個空格

// right!
val myLongFieldNameWithNoRealPoint =
  foo(
    someVeryLongFieldName,
    andAnotherVeryLongFieldName,
    "this is a string",
    3.1415)

// wrong!
val myLongFieldNameWithNoRealPoint = foo(someVeryLongFieldName,
                                         andAnotherVeryLongFieldName,
                                         "this is a string",
                                         3.1415)

更好的是,盡量避免使用需要超過兩個或三個參數的方法!

此頁面的貢獻者