英文原文:http://docs.scala-lang.org/style/
譯文如下:
一般來說,Scala中的方法調用遵循Java約定。換句話說,調用目标和dot(
.
)之間不應有空格,也不應該在點和方法名之間有空格,方法名和參數分隔符之間也不應有空格(括号)。每個參數應該用逗号()之後的單個空格分隔
,
:
foo(42, bar)
target.foo(42, bar)
target.foo()
從2.8版開始,Scala現在支援命名參數。方法調用中的命名參數應該被視為等号兩邊的空格的正常參數(按逗号分隔)。
foo(x = 6, y = 7)
雖然這種風格确實使用命名參數和變量指派建立視覺模糊,但替代(等号周圍沒有間距)導緻可能非常難以閱讀的代碼,特别是對于實際的非平凡表達式。
一、0元數
Scala允許在arity-0的方法上省略括号(無參數):
reply()
// is the same as
reply
但是,隻有當有問題的方法沒有副作用(純功能)時,才應使用此文法。換句話說,調用時可以省略括号
queue.size
,而在調用時不能省略括号
println()
。這個慣例反映了上面給出的方法聲明約定。
宗教觀察這個約定将大大提高代碼的可讀性,并且可以更容易地了解任何給定方法的最基本的操作。阻止省略括号的沖動,隻需儲存兩個字元!
二、中間符号
Scala有一個特殊的無标點符号文法來調用采用一個參數的方法。許多Scala程式員使用這種符号名稱的方法:
// recommended
a + b
// legal, but less readable a
+
b
// legal, but definitely strange a
.+(
b
)
但避免使用幾乎所有的字母命名方法:
// recommended
names.mkString(",")
// also sometimes seen; controversial names mkString
","灰色區域很短,像運算符一樣的方法
max
,特别是如果交換:
// fairly common
a max b
使用多個參數(它們确實存在!)的符号方法可能仍然可以使用中綴符号來調用,用空格分隔:
foo ** (bar, baz)
然而,這種方法相當罕見,并且通常應在API設計期間避免。例如,利用
/:
和
:\
方法應優先避免其較知名的名字,
foldLeft
和
foldRight
。
三、字尾符号
Scala允許使用postfix符号來調用參數的方法:
// recommended
names.toList
// discourage names toList
這種風格是不安全的,不應該被使用。由于分号是可選的,編譯器将嘗試将其視為中綴方法,如果可以從下一行中選擇一個術語。
names toList
val answer = 42 // will not compile!
這可能會導緻意外的編譯錯誤,最糟糕的是,編譯錯誤的代碼。雖然某些DSL使用了文法,但應該将其視為不推薦使用,并避免使用。
由于Scala 2.10,使用字尾操作符表示法将導緻編譯器警告。