Webエンジニアのメモ帳

技術的な話を中心に書いています。

【Kotlin】カスタムゲッター・カスタムセッターについて

カスタムゲッター

例えば、以下のようなRectangleクラスがあるとします。

class Rectangle(val width: Int, val height: Int) {
  fun area(): Int = this.width * this.height
}

このクラスはarea()というメソッドを持っており、実行すると以下のようになります。

val rectangle = Rectangle(2,3)
// 6が表示される
println(rectangle.area())

このarea()を、メソッドではなくフィールドとして定義することができます。

class Rectangle(val width: Int, val height: Int) {
  val area: Int
    get() = this.width * this.height
}

実行するときは、area()というメソッドを呼ぶのではなく、areaを参照します。

val rectangle = Rectangle(2,3)
// 6が表示される
println(rectangle.area)

このような仕組みが、カスタムゲッターです。

カスタムセッター

カスタムセッターは、フィールドのセッターを変更できる仕組みです。

例えば以下のクラスがあるとします。nameフィールドの値を外部から変えると、値を変更するだけでなく、文章を出力します。

class Person() {
  var name: String = ""
    set (value) {
      field = value
      println("こんにちは、${value}さん!")
    }
}

これを実行すると以下のようになります。

val person = Person()
// 「こんにちは、山本さん!」と出力される
person.name = "山本"

参考

自分の理解のために記事にしてみましたが、既存の記事も分かりやすいです。特に以下は分かりやすかったです。

pouhon.net