イテレータ
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
(だっけ?)
配列とかいろいろ
イテレータは値の発生が同期的に行われる
ストリームは値が非同期で生み出される