当 return 值可以更改时,我是否应该为方法 getClients 使用 `()`?
Should I use `()` or not for the method `getClients` when the return value can be changed?
在 Scala 中,我有一个 server
class,它有一个方法,比如说,getClients
,它 return 是当前连接的客户端。
我不知道该如何定义它:
getClients
clients
getClients()
clients()
当新客户端连接或断开连接时,此方法的 return 值会随时间变化。
我应该选择哪一个?
我看到的一个新兴标准似乎是明智的,它是只在它有副作用时用 () 定义它,而不是在它前面加上 get。如果您要遵循惯例,这意味着您将使用 2.
根据 the Scala style guide 解决您的问题如下:
Methods which act as accessors of any sort (either encapsulating a field or a logical property) should be declared without parentheses except if they have side effects.
你应该定义你的方法而不带括号(getClients
或 clients
,这是一个品味问题,但是,指南建议第二个选项)因为它充当访问器而不是出现副作用。关于集合更改,我会说这是可变集合的一个特性,而不是方法本身。
此外,如果您不打算在聚合之外修改集合,也许您应该考虑将返回结果更改为不可变变体,并提供一些方式来通知客户端有关更改。
关于括号,重要的是该方法是否有副作用:
来自 Scala 风格指南 (http://docs.scala-lang.org/style/naming-conventions.html#parentheses)
Methods which act as accessors of any sort (either encapsulating a field or a logical property) should be declared without parentheses except if they have side effects.
确实,如果函数依赖于一些变化的值,那么它就不是纯函数。然而,这对于调用者来说是非常清楚的,因为该方法被命名为访问器,并且它是 arity-0(arity-0 是访问器或有副作用 - 否则它是无用的!)。更大的问题是应该通过使用或不使用括号来传达的副作用。
在我看来,clients
和 getClients
之间的区别不是很大,因为两者都可以被视为基本访问器。将 get
排除在外是 Scala 中的一种约定,所以我会使用 clients
。
在 Scala 中,我有一个 server
class,它有一个方法,比如说,getClients
,它 return 是当前连接的客户端。
我不知道该如何定义它:
getClients
clients
getClients()
clients()
当新客户端连接或断开连接时,此方法的 return 值会随时间变化。
我应该选择哪一个?
我看到的一个新兴标准似乎是明智的,它是只在它有副作用时用 () 定义它,而不是在它前面加上 get。如果您要遵循惯例,这意味着您将使用 2.
根据 the Scala style guide 解决您的问题如下:
Methods which act as accessors of any sort (either encapsulating a field or a logical property) should be declared without parentheses except if they have side effects.
你应该定义你的方法而不带括号(getClients
或 clients
,这是一个品味问题,但是,指南建议第二个选项)因为它充当访问器而不是出现副作用。关于集合更改,我会说这是可变集合的一个特性,而不是方法本身。
此外,如果您不打算在聚合之外修改集合,也许您应该考虑将返回结果更改为不可变变体,并提供一些方式来通知客户端有关更改。
关于括号,重要的是该方法是否有副作用:
来自 Scala 风格指南 (http://docs.scala-lang.org/style/naming-conventions.html#parentheses)
Methods which act as accessors of any sort (either encapsulating a field or a logical property) should be declared without parentheses except if they have side effects.
确实,如果函数依赖于一些变化的值,那么它就不是纯函数。然而,这对于调用者来说是非常清楚的,因为该方法被命名为访问器,并且它是 arity-0(arity-0 是访问器或有副作用 - 否则它是无用的!)。更大的问题是应该通过使用或不使用括号来传达的副作用。
在我看来,clients
和 getClients
之间的区别不是很大,因为两者都可以被视为基本访问器。将 get
排除在外是 Scala 中的一种约定,所以我会使用 clients
。