■イテレータ(Iterator)とは?
配列やそれに類似するデータ構造の各要素に対する繰り返し処理の抽象化のこと。反復子として訳される。
つまりどういうことだ?
どうやら、イテレータには内部イテレータと外部イテレータがあるらしい。
■内部イテレータ
要素を格納したオブジェクトが、自身の要素に対して繰り返しながらユーザコードを逐一呼び出す方式である。繰り返しの記述がオブジェクトの内部にあるためこの名前である。一般的にforeach文などとして言語での用意がされている。
どうやら、こちらはメソッド内部に隠蔽されているようで基本的に考える必要が無さそう。内部では色々やってくれてるよーってことだろう。繰り返し処理が隠蔽されるからコード自体も読みやすいよね。
■外部イテレータ
要素を参照するオブジェクトを定義し、それを典型的には1つずつ先の要素を指すように変化させながら要素をなぞる方式。繰り返しの記述はオブジェクトの外部にあたる。
メリット
・繰り返しを途中で止め、途中結果を保存してあとで再開することができる
・複数のコンテナを平行して繰り返すことができる
・特別な文法の支援なく実装できる
PHPだと、ArrayIteratorや、InfiniteIteratorなどがある。あんまり知らなかった・・・。
http://d.hatena.ne.jp/sotarok/20091216/1260896485
ここにIteratorの殆どは載ってる。
一応、PHPのIteratorには、
[ArrayIterator] [RecursiveArrayIterator] [EmptyIterator] [IteratorIterator] [AppendIterator] [CachingIterator] [RecursiveCachingIterator] [FilterIterator] [CallbackFilterIterator] [RecursiveCallbackFilterIterator] [RecursiveFilterIterator] [ParentIterator] [RegexIterator] [RecursiveRegexIterator] [InfiniteIterator] [LimitIterator] [NoRewindIterator] [MultipleIterator] [RecursiveIteratorIterator] [RecursiveTreeIterator] [DirectoryIterator] [FilesystemIterator] [GlobIterator] [RecursiveDirectoryIterator]
多い・・・。
使えるものと使えないものが結構分かれてるっぽいですね。あんまり詳しくは知らなくてもいいかもです・・。実践に使うのか不明・・・
コメント