イテレータをシンプルに結合するIterator Sequencing
イテレータに関連する機能としては、ES2026においてIterator Sequencingが標準化されました。これは、2つ以上のイテレータを単一のイテレータであるかのように扱う機能です。
Iterator Sequencingの利用できない従来の環境では、以下のようにジェネレータ関数を使って2つのイテレータを束ねる必要がありました。
const earlys = Iterator.from([1, 2, 3, 4, 5, 6]);
const lates = Iterator.from([9, 10, 11, 12]);
const EarlyAndLates = function* () {
yield* earlys;
yield 7;
yield 8;
yield* lates;
}();
const arr = Array.from(EarlyAndLates);
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Iterator Sequencingを使うと、Iteratorオブジェクトのconcatメソッドを使って、以下のように記述できます。
const earlys2 = Iterator.from([1, 2, 3, 4, 5, 6]); const lates2 = Iterator.from([9, 10, 11, 12]); const iter = Iterator.concat(earlys2, [7, 8], lates2); const arr2 = Array.from(iter); console.log(arr2); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ジェネレータを使う方法に比べて、はるかに記述がシンプルなことが分かりますね。
まとめ
今回は、ECMAScript 2025で導入されたSync Iterator helpers、2026で導入されたIterator Sequencingを紹介しました。それはそれで便利であったArrayオブジェクトのメソッドを、さらに効率的に利用できることが分かったのではないかと思います。
次回は、成熟した集合演算のためのデータ構造となったSetを紹介します。
