【いてれーたー】

イテレーター とは?

💡 データの列を「一つずつ取り出す自動販売機」
📌 このページのポイント
イテレータの仕組み コレクション(内部構造は隠蔽) A B C D E 現在位置 イテレータ next() → 次の要素を返す hasNext() → true / false 生成 next() を呼ぶたびにポインタが進む 1回目 next() → A hasNext: true 2回目 next() → B hasNext: true 3回目 next() → C hasNext: true 4回目 next() → D hasNext: true 5回目 next() → E hasNext: false 内部構造(配列・リスト・ツリー等)を意識せずに 要素へ順番にアクセスできる統一インターフェース
イテレータの仕組み
ひよこ ひよこ

イテレーターって普通のfor文と何が違うの?

ペンギン先生 ペンギン先生

普通のfor文でインデックス(番号)を使って配列にアクセスするのは「何番目のデータ」という指定だよね。イテレーターは「次のデータをください」と頼むだけで順番にデータが出てくる仕組みなんだ。配列だけでなくSet・Map・ファイルの行など、いろいろなデータの集まりに同じやり方でアクセスできるのが強みだよ。

ひよこ ひよこ

具体的にどう使うの?

ペンギン先生 ペンギン先生

JavaScriptだとfor...of文を使うとイテレーターが自動で動くよ。「for (const item of items)」と書くだけで一つずつ取り出せる。Pythonのfor文も内部でイテレーターを使っていて、「for item in items:」と書くだけでOKなんだ。

ひよこ ひよこ

イテレーターのメリットって他にもある?

ペンギン先生 ペンギン先生

大きなメリットは「遅延評価」ができることだよ。100万件のデータがあっても、全部メモリに載せずに1件ずつ処理できるんだ。Pythonのジェネレーター(yield文)やJavaScriptのfunction*がまさにこれで、巨大なファイルを1行ずつ読み込むときなんかに威力を発揮するよ。メモリ効率が段違いなんだ。

ひよこ ひよこ

無限イテレーターって何に使うの?

ペンギン先生 ペンギン先生

Pythonのitertools.count()は0, 1, 2, 3...と永遠に数を返すイテレーター。「最初のN件だけ取り出す」や「条件を満たすまでループする」という使い方をする。ストリーミングデータの処理やゲームのフレームループなど、終わりが決まっていない処理に向いているよ。

ひよこ ひよこ

async iteratorってあるの?

ペンギン先生 ペンギン先生

あるよ!JavaScriptのfor await...of構文やPythonのasync forで使えるんだ。APIページネーション(1ページずつ取得して処理する)や、WebSocketからのメッセージを順次処理するときに便利。非同期処理を「順番に取り出す」というイテレーターの直感的な書き方で扱えるのが強みだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「イテレーター」って出てきたら「データの集まりから要素を一つずつ順番に取り出す仕組みだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「iterator」 = 反復するもの
💬 iterateは「繰り返す」という意味。要素を一つずつ繰り返し取り出すことからこう呼ばれるよ
← 用語集にもどる