はじめに
公式の問題集「Kotlin Koans」を解きながらKotlinを学習します。
過去記事はこちら
- Introduction
- Classes
- Conventions
- Collections
- Properties
問題
カスタムゲッターを追加して、変数lazy
を本当にlazy(遅延初期化)にします。
これは、最初のアクセスの間にinitializer()
を呼び出すことによって初期化される必要があります。
必要であれば、追加のプロパティを追加することができます。
デリゲートプロパティは使わないでください!
修正前コード.kt
class LazyProperty(val initializer: () -> Int) {
/* TODO */
val lazy: Int
get() {
TODO()
}
}
問題のポイント
クラスを初期化するときに、そのタイミングでは値が決められないけれどvalで保持したいプロパティ(今回だとlazy)がある場合があります。
解答例
class LazyProperty(val initializer: () -> Int) {
var value: Int? = null
val lazy: Int
get() {
if (value == null) {
value = initializer()
}
return value!!
}
}