当返回值可以更改时,我应该使用`()`或不使用方法`getClients`吗?

时间:2015-05-22 10:24:51

标签: scala methods naming-conventions

在Scala中,我有一个server类,它有一个方法,比如getClients,它返回当前连接的客户端。

我不确定应该如何定义它:

  1. getClients
  2. clients
  3. getClients()
  4. clients()
  5. 当新客户端连接或断开连接时,此方法的返回值会随时间而变化。

    我应该选择哪一个?

3 个答案:

答案 0 :(得分:8)

当谈到括号时,重要的是该方法是否有副作用:

来自Scala styleguide(http://docs.scala-lang.org/style/naming-conventions.html#parentheses

  

作为任何类型的访问器(封装字段或逻辑属性)的方法应该在没有括号的情况下声明,除非它们有副作用。

如果它取决于某些变化的值,那么该函数不是纯粹的。然而,对于调用者来说这是非常清楚的,因为该方法被命名为访问者并且它的arity-0(arity-0是访问者或具有副作用 - 否则它是无用的!)。更大的问题是使用或不使用括号应该传达的副作用。

clientsgetClients之间的差异 - 在我看来 - 并不是那么好,因为两者都可以被视为基本访问者。离开get是Scala中的一种约定,所以我会使用clients

答案 1 :(得分:6)

根据the Scala style guide解决您的问题如下:

  

作为任何类型的访问器(封装字段或逻辑属性)的方法应该在没有括号的情况下声明,除非它们有副作用。

你应该定义你的方法没有括号(getClientsclients,这是一个品味问题,然而,指南建议第二个选项),因为它作为一个访问者,没有副作用介绍。关于集合更改,我会说它是可变集合的一个特性,而不是方法本身。

此外,如果您的目的不是要在聚合之外修改集合,也许您应该考虑将返回结果更改为不可变变量,并提供一些方法来通知客户有关更改。

答案 2 :(得分:2)

我见过的新兴标准似乎是明智的,如果它有副作用,只用()定义它,而不是用get作为前缀。如果你要遵循惯例,这意味着你会使用2。