lazy stored property (遅延格納型プロパティ)とは?-Swiftを理解する

Swift

lazy stored propertyとは?

普通のstored property(格納型プロパティ)は、初期化の際に値を与えず必要とされたときに初めて値を決定することができるという性質を持ちます。使うタイミングで値が格納されていれば十分ですからね。
(stored propertyについてはこちらで説明しています)

それに対して、lazy stored property(遅延格納型プロパティ) は、利用されるまで初期化処理自体を走らなくさせるプロパティのことです。初期化にコストがかかるようなプロパティに対して有効な機能になります。

使い方

使い方は非常に簡単で、プロパティの先頭にlazyという修飾子をつけるだけです。

以下、lazyなしとlazyありの処理の違いについて見てみましょう。

var name = "名無し"

class Person {
    var name: String = name
}

let person = Person()
name = "山田"

print(person.name) // もちろん 名無し と表示される
var name = "名無し"

class Person {
    lazy var name: String = name
}

let person = Person()
name = "山田"

print(person.name) // こうすると 山田 と表示される

使い所

使い所としては、以下のような時が考えられます。

  • 初期化にコストがかかり、かつ、使われるまで初期化する必要がない時
  • インスタンスを生成した後の状態によって初期値を変えたいとき

注意点

lazyはとても便利でこれを使うことで実装の幅が広がりますが、初期化のタイミングを追いにくいため思わぬバグを産む可能性もあります。特にチーム開発の際はどのプロパティがlazyなのか、いつ初期化されるのかをコメント等でしっかり共有しておく必要があるでしょう。

コメント