天天看點

[scala代碼風格指南]--方法調用

英文原文:​​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,使用字尾操作符表示法将導緻編譯器警告。