イテレータ
iterator
値がつぎつぎと生み出されていく、なんか値
iter.next() のようなメソッドをもつことが多い
生成された値を含んだ構造が iter.next() の返り値になる
JavaScript では { done: false, value: 値 }
Rust では .next() は Option<T> を返す
継続中は Some(t) が返る
終端に達した場合途中とは違うものが返る
順番がある/シーケンシャル
next() で返ってくる値は基本的に next() を呼び出したタイミングで生成される
最近の言語のfor文はイテレータをぶん回すための構文であることが多い
Rust は for i in iter {}
JavaScript は for (const i of iter) {}
イテレータではないが暗黙的な変換を挟んでイテレータとして扱える型がある
JavaScript では Iterable
イテレータを返す [Symbol.iterator] メソッドを実装したオブジェクト
ECMAScriptでは Array Map Set など
for-of などの際には内部的に [Symbol.iterator] が呼ばれる
Rust では IntoIterator (だっけ?)
配列とかいろいろ
イテレータは値の発生が同期的に行われる
ストリームは値が非同期で生み出される