在Scala中,我有一个server
类,它有一个方法,比如getClients
,它返回当前连接的客户端。
我不确定应该如何定义它:
getClients
clients
getClients()
clients()
当新客户端连接或断开连接时,此方法的返回值会随时间而变化。
我应该选择哪一个?
答案 0 :(得分:8)
当谈到括号时,重要的是该方法是否有副作用:
来自Scala styleguide(http://docs.scala-lang.org/style/naming-conventions.html#parentheses)
作为任何类型的访问器(封装字段或逻辑属性)的方法应该在没有括号的情况下声明,除非它们有副作用。
如果它取决于某些变化的值,那么该函数不是纯粹的。然而,对于调用者来说这是非常清楚的,因为该方法被命名为访问者并且它的arity-0(arity-0是访问者或具有副作用 - 否则它是无用的!)。更大的问题是使用或不使用括号应该传达的副作用。
clients
和getClients
之间的差异 - 在我看来 - 并不是那么好,因为两者都可以被视为基本访问者。离开get
是Scala中的一种约定,所以我会使用clients
。
答案 1 :(得分:6)
根据the Scala style guide解决您的问题如下:
作为任何类型的访问器(封装字段或逻辑属性)的方法应该在没有括号的情况下声明,除非它们有副作用。
你应该定义你的方法没有括号(getClients
或clients
,这是一个品味问题,然而,指南建议第二个选项),因为它作为一个访问者,没有副作用介绍。关于集合更改,我会说它是可变集合的一个特性,而不是方法本身。
此外,如果您的目的不是要在聚合之外修改集合,也许您应该考虑将返回结果更改为不可变变量,并提供一些方法来通知客户有关更改。
答案 2 :(得分:2)
我见过的新兴标准似乎是明智的,如果它有副作用,只用()定义它,而不是用get作为前缀。如果你要遵循惯例,这意味着你会使用2。