天天看点

[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,使用后缀操作符表示法将导致编译器警告。