課題
こんなコードがあったとして
// 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
それぞれ何が違うのかがふと気になったので確認。
回答
- 都度処理結果が返される
- オブジェクト初期化時に一度だけ呼ばれ、以後変更されない
- 最初に参照された時点でブロックの処理結果が代入され、以後変更されない
- 都度処理結果が返される
4の記法が頭に残ってたせいで1を2に書き換えたくなったけど
冷静に考えたらそれってただの代入だから挙動違うよね、という話。