\
2014年07月13日
Posted by 屋台ブルー at 2014年07月13日00:00 Comment(0)

Swiftで遊ぼう! - 5 なんだなんだLazy?

swift_logo-----2014年8月27日(β6)
ARCの勉強中にLazy(レイジー)が再び出てきたので復習をする。レイジー・ストアド・プロパティ、これをどう訳すのが適当なんでしょうね。私的には、「気ままに保持するプロパティ」って感じです。更にわかりにくくなったかも。まあ冗談はさておき、ここのエントリーを書いた時から少しSwiftの知識は強化されているので、今の知識でレイジーの説明をもう一度しよう。

「Lazy Stored Propertyies」というネーミングから考えて、値を保持できるプロパティ(クラス型もしくはストラクチャー型の)で、必ず値を保持しなければならないが、Lazyという枕詞(モディファイア)がつくということで、少々融通性が高まる。

レイジー宣言、クラス型とストラクチャー型のプロパティでの使用に限定された枕詞だ。この2つの型に共通するステップはインスタンス生成である。ということは、インスタンス生成時のお約束事で「初期化(イニシャライズ)ってな作業が加わる。実はレイジー宣言の重要なコンセプトはここにある。この初期化が完了するまで値を保持する必要がないので、定数(let)ということが有りえず、必ず変数(var)宣言になる。更に、イニシャライザーが完全に終了するまでプロパティは初期値を持つ必要がない。これはどういう意味かと言えば、selfで指定する他のプロパティを利用できるということで、computedプロパティ的な働きになるということです。ここでクロージャーを使って、関数的な働きができることをACのセクションで説明されている。

当然のようにインスタンス初期化ステップが完全に終了した状態、インスタンスを利用する段階になってもLazy宣言したプロパティは値を保持する必要がなく、外部から呼ばれて、外から引数が入ったところで初めて値を保持してもよい。本当に融通性が高いプロパティなんです。こういう説明でいいのだろうか?

-----2014年8月9日(β5)
βバージョンの変更に伴いlazy宣言時に「@」が不要になっていて、配列宣言も以下のように変更になっているので注意。

-----2014年7月13日オリジナルポスト(古い記述をイタリックで表記して新しい記述をボールドに変更)
ちょうどプロパティってところの説明を読んでるけど、プロパティってStructureとClassしか持てないんですね。Arrayの内容もプロパティだと思っていたが違うようだ。ArrayやDictionaryで宣言された定数や変数の中身はItemってことになるのかな。[2014年8月9日追記:ここでItemと言っているが、配列型や辞書型インスタンスの中身はエレメントというのが正しい。]

Propertyって、保持できるやつをStored properties。そして、計算式って形ではいるやつがComputed propertiesって話だ。どうもComputed propertiesって概念がまだはっきりしない。まだその部分を読んでいないからね。想像の域を超えないが、初心者的に考えると、計算式のプロパティってことは、argument(因数)が渡されると、それで計算して結果をプロパティで返すような気がする。さて、本当かどうか関連項目を読んでから考えよう。

今読んでいるところはLazy Stored Propertiesの説明をしているところで、全く聞いたことが無く想像もできないパートだ。しばし時間をかけて咀嚼してみよう。

..... 時間の経過

@lazy→lazy」って枕詞は、クラスを宣言して、クラスの外からプロパティが呼ばれた時だけ生成されるってことかな?

class DataImporter {
/*
something happens when imortded data comes...
*/
var fileName = "data.txt"
}

class DataManager {
@lazy→lazy var importer = DataImporter()
var data = String[]()→[String]()
}

let manager = DataManager()
manager.data += "some data"
manager.data += "some more data"

println(manager.data)

managerってDataManagerクラスのインスタンスが生成されたとこどで、importerってプロパティはできてないけど、、
println(manager.importer.fileName)
と呼ばれた時にimporterっていうプロパティが生成されるということらしい。じゃあ、オプション(?)のプロパティーバージョンがレイジーなんだろうか?
なんかトンチンカンな理解をしているのかもしれないが、外部からの働きかけがあった時に生成されるクラスのプロパティをレイジーと理解しておこう。


同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 5 なんだなんだLazy?
    コメント(0)