前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。古い記事にはアプリ以外も含まれます。

Kotlin : 代入とgetterと by lazy

課題

こんなコードがあったとして

// 1 getter
val nickname: String?
    get() = _user.value?.nickname

// 2 代入
val nickname: String? = _user.value?.nickname

// 3 by lazy
val nickname: String? by lazy {
     _user.value?.nickname
}

// 4 関数
fun nickname(): String? = _user.value?.nickname

それぞれ何が違うのかがふと気になったので確認。

回答

  1. 都度処理結果が返される
  2. オブジェクト初期化時に一度だけ呼ばれ、以後変更されない
  3. 最初に参照された時点でブロックの処理結果が代入され、以後変更されない
  4. 都度処理結果が返される

4の記法が頭に残ってたせいで1を2に書き換えたくなったけど
冷静に考えたらそれってただの代入だから挙動違うよね、という話。