by lazyとは
今長澤太郎さんの、赤べこ本を読んでおります。
※転載あかんようなら消します。すいません。
まだ全然読めてないんですが、ちらっと出てきた物体に「??」となっております。
それがby lazy !!!!!
一応自分でKotlinのDocを参照してみました。
https://kotlinlang.org/docs/reference/delegated-properties.html
以下の場合にプロパティに対して移譲できるようです。
つまり移譲プロパティ(Delegated Properties)ってやつです(赤べこ本にも書いてありました。)
class Sample(n: Int, d: Int) {
private val str: String by lazy {"初期化します"}
byで移譲
by lazy
でひとまとめに読んでましたが、そうではなくて、
by
のあとに移譲するオブジェクトが渡せるようです。
じゃあlazyって?
lazyってなんじゃってことになります。
リファレンスにも一応書いてあります。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/lazy.html
lazy() is a function that takes a lambda and returns an
instance of Lazy<T> which can serve as a delegate
for implementing a lazy property: the first call to get()
executes the lambda passed to lazy() and remembers the result,
subsequent calls to get() simply return the remembered result.
lambdaがまだまだ理解できていないですが、雰囲気的に
- 初期化時に利用します。
- 一度getしたときの結果を返し、且つ結果を記憶します。
- 再度getした時は、最初にgetしたときの結果を返します。
- Synchronizedで遅延実行されます
と言った感じでしょうか。。
移譲プロパティは他にもあるようです。
もう少し勉強する必要がありそうですが、ひとまずby lazyをつかった場合はどんなもんなんやっていうのがわかったのでよしとします。
ツッコミがあったり、なにかいい例文などあれば教えてください