Functional
generator: iterator は一度進めた位置から再開する
generator が返す iterator は状態を持ち、同じ iterator を二度走査しても最初からは始まりません。
SourcesingleUseIterators.ts
Node.js 22
export function* numbers(): Generator<number> {
yield 1;
yield 2;
}TestsingleUseIterators.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { numbers } from "../../src/iterator/singleUseIterators.js";
test("消費したiteratorは二回目に最初から読めない", () => {
const iterator = numbers();
assert.deepEqual(Array.from(iterator), [1, 2]);
assert.deepEqual(Array.from(iterator), []);
});01Assertion
このテストで確認できること
- 最初の Array.from が全ての値を消費する
- 同じ iterator の二回目は空になる
複数回の走査が必要なら配列に収集するか、iterator を毎回作る factory を渡します。
OBSERVED RESULT
expected: first → [1, 2]
actual: [1, 2]
expected: second → []