【JavaScript ECMAScript】Iterator::Iterator.prototype[Symbol.iterator]インスタンスメソッドの使い方
Iterator.prototype[Symbol.iterator]()インスタンスメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Iterator.prototypeSymbol.iteratorメソッドは、イテレータープロトコルに準拠するオブジェクト自身を返すメソッドです。このメソッドは、イテレーターオブジェクトがそれ自体で反復処理可能な「イテラブル」として機能することを保証するために使用されます。
JavaScriptにおいて「イテレーター」とは、next()メソッドを持つオブジェクトのことで、このnext()メソッドが呼び出されるたびに、シーケンス内の次の値とその処理が完了したかどうかを示す{ value: ..., done: ... }形式のオブジェクトを返します。一方、「イテラブル」とは、[Symbol.iterator]()という特殊なメソッドを持つオブジェクトのことで、このメソッドを呼び出すとイテレーターが返されます。for...ofループやスプレッド構文などは、このイテラブルを期待して動作します。
Iterator.prototype[Symbol.iterator]()メソッドは、イテレーターオブジェクト自身を返す[Symbol.iterator]()メソッドを提供することで、イテレーターオブジェクトが自身もイテラブルである状態を作り出します。これにより、イテレーターオブジェクトそのものを、for...ofループやスプレッド構文といったイテラブルを要求する場面で直接利用することが可能になります。
例えば、Map.prototype.entries()などが返すイテレーターは、すでにnext()メソッドを持っていますが、このIterator.prototype[Symbol.iterator]()メソッドを実装していることで、開発者はそのイテレーターオブジェクトを直接for...ofループで回すことができます。この機能は、データ構造の柔軟な反復処理を実現し、コードの記述をより簡潔にする上で重要です。
構文(syntax)
1const myIteratorAndIterable = { 2 current: 0, 3 max: 3, 4 5 next() { 6 if (this.current < this.max) { 7 return { value: this.current++, done: false }; 8 } else { 9 return { done: true }; 10 } 11 }, 12 13 [Symbol.iterator]() { 14 return this; 15 } 16};
引数(parameters)
引数なし
引数はありません
戻り値(return)
Iterator
このメソッドは、イテレーター自身を返します。これにより、イテレーターを for...of ループなどで繰り返し処理できるようになります。