【学習kotlinシリーズ】プロパティ(カスタムゲッター・カスタムセッター)

Qiitaでことりん学習帳を発売しています!

カスタムゲッター

カスタムゲッターは、クラス内にある他のプロパティの情報を取得するためのプロパティ。カスタムゲッターにしたいプロパティの直後にget()という関数名で定義することで、カスタムゲッターは定義できる。

実際に作ってみる

カスタムゲッターを実際に作ってみる。nameLengthがカスタムゲッター。

class MyGame(){

    // プロパティを定義
    var name: String = ""
    var hp: Int = 0
    var mp: Int = 0
    
    // カスタムゲッターを定義
    val nameLength: Int
        get(): Int {
            return this.name.length
        }


    // メソッドを定義
    fun getHP(): Int {
        return this.hp
    }

    fun getMP(): Int {
        // this は省略できる
        return mp
    }
}

fun main(args: Array<String>){

    // MyGameインスタンスの作成
    val hero: MyGame = MyGame()

    // プロパティを設定
    hero.name = "John"
    hero.hp = 100
    hero.mp = 20

    // メソッドを実行
    print("現在のHP: ")
    println(hero.getHP())
    print("現在のMP: ")
    println(hero.getMP())
    print: ("名前の長さ")
    
    // カスタムゲッターで名前の長さを取得
    println(hero.nameLength)
}

実行結果

現在のHP: 100
現在のMP: 20
名前の長さ: 4

カスタムセッター

カスタムセッターは、カスタムゲッターとは逆に、プロパティに値を設定する時にカスタムして値をセットすることができる。カスタムセッターの定義は、カスタムセッターを設置するプロパティの後にset()関数を定義することで実装できる。

実際に書いてみる

nameプロパティにカスタムセッターを定義した。

class MyGame(){

    // プロパティを定義

    // カスタムセッターを定義
    var name: String = ""
        set(value) {
            println("nameに${value}が設定されました。")
            // 値は field変数に格納する
            field = value
        }

    var hp: Int = 0
    var mp: Int = 0

    // カスタムゲッターを定義
    val nameLength: Int
        get(): Int {
            return this.name.length
        }


    // メソッドを定義
    fun getHP(): Int {
        return this.hp
    }

    fun getMP(): Int {
        // this は省略できる
        return mp
    }
}

fun main(args: Array<String>){

    // MyGameインスタンスの作成
    val hero: MyGame = MyGame()

    // プロパティを設定
    hero.name = "John"
    hero.hp = 100
    hero.mp = 20

    // メソッドを実行
    print("現在のHP: ")
    println(hero.getHP())
    print("現在のMP: ")
    println(hero.getMP())
    print("名前の長さ: ")

    // カスタムゲッターで名前の長さを取得
    println(hero.nameLength)
}

実行結果

名前にJohnが設定されました。
現在のHP: 100
現在のMP: 20
名前の長さ: 4