每個縮排層級為 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)
更好的是,盡量避免使用需要超過兩個或三個參數的方法!