Scala getters / setters - 最佳实践?

时间:2014-09-24 08:24:05

标签: java scala naming-conventions

我是Java SE / EE开发人员,但在Scala中是初学者。在Java中,当我有一些应该可以被其他代码访问的私有字段时,我使用getX() / setX()经典样式的getter / setter。但是,不确定Scala怎么样。我注意到在Scala中,字段的getter / setter的命名约定是使用与字段#1相同的名称。那么可以简单地设置字段public,或者我应该使用这种样式的getter / setter吗?:

private var _value = .....
def value = _value
def value_= (newVal:Int) = _value = newVal

在字段名称本身之前放置下划线是否可以(根据scala命名约定)?

谢谢。

2 个答案:

答案 0 :(得分:22)

Scala Style Guide很好地涵盖了这一点。

  

对于属性的访问者,方法的名称应该是属性的名称。

Scala不遵循Java惯例。 Scala提出了一个观点,即调用者不应该能够区分字段访问和方法调用,这意味着约定是给它们两个相同的名称;因此,如果将字段更改为方法,则减少所需的代码更改量,反之亦然。

在字段名称本身之前放置下划线是否可以(根据scala命名约定)?

Scala约定是为我们想要为私有的字段添加前缀,否则这些字段与公共方法具有相同的名称,或者以零为后缀。这两种方法都是可以接受的。

private var _value = .....
def value = _value
def value_= (newVal:Int) = _value = newVal

但是,在这个例子中,额外的行不是必需的。该约定存在,以便我们可以使用这个较短的版本,然后在/我们需要时更改它更明确的版本,而无需在每个呼叫站点进行更改。

var value:Int = 0

答案 1 :(得分:5)

根据Scala docs

  

Scala不遵循预先设置set / get到mutator和accessor方法的Java约定(分别)。相反,使用以下约定:

  • 对于属性的访问者,方法的名称应该是属性的名称。
  • 在某些情况下,可以在布尔访问器(例如isEmpty)上添加“is”。这应该只是在没有提供相应的mutator的情况下。
  • 对于mutator,方法的名称应该是附加“_ =”的属性的名称。

示例:

class Foo {
  def bar = ...
  def bar_=(bar: Bar) {
    ...
  }
  def isBaz = ...
}