まず、ジェネレータ関数の基本的な構文を見てみましょう。
function* myGenerator() {
// コードの実行中に値を返すためのyield文を使用する
yield '値1';
yield '値2';
yield '値3';
}
上記の例では、function*
というキーワードを使用してジェネレータ関数を定義しています。関数内でyield文を使用することで、ジェネレータ関数は値を返すことができます。
次に、ジェネレータ関数を使用してイテレータを作成する方法を見てみましょう。
const iterator = myGenerator();
console.log(iterator.next()); // { value: '値1', done: false }
console.log(iterator.next()); // { value: '値2', done: false }
console.log(iterator.next()); // { value: '値3', done: false }
console.log(iterator.next()); // { value: undefined, done: true }
上記の例では、myGenerator
関数からイテレータを作成し、next
メソッドを使用して値を取得しています。next
メソッドは、value
プロパティとdone
プロパティを持つオブジェクトを返します。value
プロパティにはyield文で返された値が含まれ、done
プロパティはイテレータが完了したかどうかを示します。
ジェネレータ関数を使用すると、繰り返し処理を制御するための柔軟性が向上します。以下に、ジェネレータ関数を使用してフィボナッチ数列を生成する例を示します。
function* fibonacci() {
let current = 0;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const fibIterator = fibonacci();
console.log(fibIterator.next().value); // 0
console.log(fibIterator.next().value); // 1
console.log(fibIterator.next().value); // 1
console.log(fibIterator.next().value); // 2
console.log(fibIterator.next().value); // 3
// ...
この例では、無限のフィボナッチ数列を生成するためにジェネレータ関数が使用されています。無限のシーケンスを必要としない場合でも、ジェネレータ関数は状態の管理や繰り返しの停止と再開など、さまざまな場面で役立ちます。
以上が、JavaScriptにおけるジェネレータ関数の使用方法とコード例の紹介です。ジェネレータ関数は、柔軟で強力なツールであり、繰り返し処理を効果的に制御するために活用できます。