首页 > 解决方案 > Scala var 最佳实践 - 封装

问题描述

例如,我试图了解在 scala 中使用 vars 的最佳实践是什么

class Rectangle() {
 var x:Int = 0
}

或类似的东西:

class Rectangle() {
 private var _x:Int = 0
 def x:Int = _x
 def x_(newX:Int):Unit = _x=newX
}

哪一个可以被认为是更好的?为什么?谢谢!

标签: scalaclassprivateencapsulation

解决方案


正如 Luis 在评论中已经解释的那样,只要您能够避免,就应该避免使用 vars,而像您给出的这样一个简单的案例是可以使用以下内容更好地设计的案例之一:

// Companion object is not necessary in your case
object Rectangle {
   def fromInt(x: Int): Option[Rectangle] = {
     if(x > 0) {
       Some(Rectangle(x))
     } else None
}
final case class Rectangle(x: Int)

当您无法避免在 scala 中使用 var 时,这种情况非常罕见。Scala 的一般习语是:“让你的变量不可变,除非有充分的理由不这样做”


推荐阅读