Iterator パターン

デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。

Iterator から…。そもそもイテレータとは何かとググってみると

プログラミング言語において配列やそれに類似するデータ構造の各要素に対する繰返し処理の抽象化である。

何らかのデータを繰り返せるようにする仕組み。言葉だけの意味であれば foreach もイテレータ。

クラス図

Iterator

キモの部分は以下のループで順番にイテレータ内のオブジェクトを処理できるって事かと。

while ($it->hasNext()) {
    $book = $it->next();
    echo $book->getName()."\n";
}

自分としての理解・疑問

以下のような利点があるのかな。

  • なぜ foreach や for でループさせないの?→ 逆順になったりループの仕方に変更があっても対応しやすい
  • データ(ここだと配列)の構造などに依存しない
  • データへのアクセスの方法を拡張しやすい(前、後のような指定ではなく Index の直接指定とか)
  • 多分正確にやるんだったら hasNext だけじゃなくて hasPrevious とかも必要そう

感想

for ループで済んじゃうというのも事実なので、ここまで考えて実装する粒度というか規模の感覚がわかるとよいなと思った。

参考