【Node.js24.x】Symbol::iterator定数の使い方
iterator定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Symbol.iterator定数は、JavaScriptのイテレーションプロトコルにおいて、オブジェクトが反復可能(イテラブル)であることを示すための特殊なシンボル値です。この定数は、オブジェクトがfor...ofループなどの反復処理で使用される際に、そのオブジェクトがどのように反復されるべきかを定義するメソッドのプロパティキーとして利用されます。
具体的には、あるオブジェクトがSymbol.iteratorという名前のプロパティを持ち、そのプロパティの値がイテレータオブジェクトを返す関数である場合、そのオブジェクトはイテラブルであると認識されます。イテレータオブジェクトとは、next()メソッドを持ち、反復処理の次の値とそれが最後の値かどうかを表現するオブジェクトを返すものです。
配列や文字列、Set、MapなどのJavaScriptに組み込まれているデータ構造は、すでにこのSymbol.iteratorプロパティを内部的に持っているため、for...ofループで要素を一つずつ簡単に取り出すことができます。開発者は、自身のカスタムオブジェクトに対してもこのSymbol.iteratorプロパティを定義することで、それらのオブジェクトをfor...ofループやスプレッド構文(例: [...myCustomObject])といったJavaScriptの標準的な反復メカニズムに対応させることが可能です。
この定数を使用することで、異なる種類のデータ構造であっても、統一された方法で反復処理を行うことが可能になり、コードの記述をより簡潔にし、可読性と柔軟性を高めることができます。これは、JavaScriptが提供する強力な機能の一つです。
構文(syntax)
1class IterableExample { 2 constructor(data) { 3 this.data = data; 4 } 5 6 // [Symbol.iterator] メソッドは、オブジェクトを反復可能にするための構文です。 7 // ここではジェネレーター関数として定義し、反復子を返します。 8 *[Symbol.iterator]() { 9 for (const item of this.data) { 10 yield item; 11 } 12 } 13} 14 15const myCollection = new IterableExample(['value1', 'value2', 'value3']); 16 17for (const element of myCollection) { 18 // for...of ループで myCollection を反復処理する構文を示しています。 19 // 各 element は 'value1', 'value2', 'value3' の順になります。 20}
引数(parameters)
引数なし
引数はありません
戻り値(return)
symbol
Symbol.iteratorは、イテレータプロトコルを実装するための組み込みシンボルです。このシンボルにメソッドが割り当てられているオブジェクトは、for...ofループなどで反復処理可能になります。