English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin Getter と Setter

この記事では、Kotlin で getter と setter の使用方法を学ぶために例を用意しています。

getter と setter を学ぶ前に、以下のことを理解しておくと良いでしょうKotlin クラスとオブジェクト

プログラミングでは、getter は属性の値を取得するために使用されます。同様に、setter は属性の値を設定するために使用されます。

Kotlin では、getter と setter は任意です。プログラムにそれらが作成されていない場合、自動的に生成されます。

getter と setter はどのように動作しますか?

以下の Kotlin コード

class Person {
    var name: String = "defaultValue"
}

同等

class Person {
    var name: String = "defaultValue"
    // getter
    get() = field
    // setter
    set(value) {
        field = value
    }
}

Person クラスのオブジェクトをインスタンス化し、name 属性を初期化する際、setter パラメータの値が渡され、field が value に設定されます。

val p = Person()
p.name = "jack"

現在、name 属性にアクセスする場合、コードの get()=field のため、field を取得します。

println("${p.name}")

これは実際の動作例です:

fun main(args: Array<String>) {
    val p = Person()
    p.name = "jack"
    println("${p.name}")
}
class Person {
    var name: String = "defaultValue"
    get() = field
    set(value) {
        field = value
    }
}

このプログラムを実行すると、出力は以下のようになります:

jack

デフォルトでは、これが getter と setter の動作の方法です。しかし、getter と setter を使用して属性の値を変更することができます(値の変更)。

例:属性の値の変更

fun main(args: Array<String>) {
    val maria = Girl()
    maria.actualAge = 15
    maria.age = 15
    println("マリア: 実際の年齢  = ${maria.actualAge}")
    println("マリア: 仮想年齢  = ${maria.age}")
    val angela = Girl()
    angela.actualAge = 35
    angela.age = 35
    println("アンジェロ: 実際の年齢  = ${angela.actualAge}")
    println("アンジェロ: 仮想年齢  = ${angela.age}")
}
class Girl {
    var age: Int = 0
    get() = field
    set(value) {
        field = if (value < 18)
            18
        else if (value >= 18 && value <= 30)
            value
        else
            value-3
    }
    var actualAge: Int = 0
}

このプログラムを実行すると、出力は以下のようになります:

マリア: 実際の年齢  = 15
マリア: 仮想年齢  = 18
安戈洛: 実際の年齢  = 35
安戈洛: 仮想年齢  = 32

ここでは、ActialAge属性が期待通りに動作しています。

しかし、プログラムのsetterを設定することで、age属性の値を変更する他のロジックがあります。