きくらげ観察日記

好きなことを、適当に。

getter, setterの定義

Scalaでは「hoge_=(x)」という形のメソッドを定義すると、「hoge = x」という形でそのメソッドへのアクセスができます。

class Coffee(
  private var country_ : String,
  private var roast_ : String,
  private var grind_ : String
) {
  def country = country_
  def country_=(c: String) { country_ = c }

  def roast = roast_
  def roast_=(r: String) { roast_ = r }

  def grind = grind_
  def grind_=(g: String) { grind_ = g }
}

実行例

scala> val coffee = new Coffee("Ethiopia", "Cinnamon", "Fine")
coffee: Coffee = Coffee@2fc789eb

scala> coffee.grind = "Coarse"
coffee.grind: String = Coarse

scala> coffee.country
res0: String = Ethiopia

scala> coffee.roast
res1: String = Cinnamon

scala> coffee.grind
res2: String = Coarse

実際の所、実はScalaには再代入可能な変数というものは存在せず、varで定義したプロパティhogeに対しては自動的にgetter hogeとsetter hoge_=が定義されるだけ、という仕様になっているようです。

Scalaファンクショナルデザイン ―関数型プログラミングの設計と理解

Scalaファンクショナルデザイン ―関数型プログラミングの設計と理解