generated at
イテレータ
iterator
値がつぎつぎと生み出されていく、なんか値
iter.next() のようなメソッドをもつことが多い
生成された値を含んだ構造が iter.next() の返り値になる
JavaScript では { done: false, value: 値 }
Rust では .next() Option<T> を返す
継続中は Some(t) が返る
終端に達した場合途中とは違うものが返る
JavaScript では { done: true, value: 適当な値 } となっている
Rust では None
配列リスト となんとなく似ている
順番がある/シーケンシャル
遅延評価 されるのが大きな違い
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 (だっけ?)
配列とかいろいろ

ストリーム と似ている
イテレータは値の発生が同期的に行われる
ストリームは値が非同期で生み出される