JavaScript/yield
yield
yield は、JavaScript において、ジェネレータ関数内で使用されるキーワードです。ジェネレータ関数は、反復処理(イテレーション)を簡素化するために使用され、yield
を使うことで、関数の実行を一時停止し、呼び出し元に値を返すことができます。その後、再開時に実行を続けることができます。
構文
function* generatorFunction() { yield value; }
ジェネレータ関数の定義は、function*
として行い、その内部で yield
を使用します。yield
は、関数の実行を一時停止し、与えられた値を呼び出し元に返します。
使用例
基本的な使用例
function* countUp() { yield 1; yield 2; yield 3; } const counter = countUp(); console.log(counter.next().value); // 1 console.log(counter.next().value); // 2 console.log(counter.next().value); // 3 console.log(counter.next().value); // undefined
この例では、countUp ジェネレータ関数が 1, 2, 3 の値を順番に yield
で返します。next()
メソッドを呼び出すたびに、関数の実行が一時停止し、次の値が返されます。
ジェネレータ関数と繰り返し処理
function* generateSequence(start, end) { for (let i = start; i <= end; i++) { yield i; } } const sequence = generateSequence(1, 5); for (let value of sequence) { console.log(value); } // 出力: // 1 // 2 // 3 // 4 // 5
yield
を使うことで、繰り返し処理を効率よく実行できます。generateSequence 関数は 1 から 5 までの数値を返すジェネレータです。
値を受け取る
function* generator() { const receivedValue = yield 'Hello'; console.log(receivedValue); yield 'World'; } const iterator = generator(); console.log(iterator.next().value); // 'Hello' iterator.next('JavaScript'); // 'JavaScript' が出力される
ジェネレータ関数内で yield
を使用する際、呼び出し元から値を受け取ることができます。`iterator.next('JavaScript')` で yield
が一時停止している位置に値を送信できます。
ジェネレータの終了
function* generator() { yield 1; yield 2; return 3; } const iterator = generator(); console.log(iterator.next().value); // 1 console.log(iterator.next().value); // 2 console.log(iterator.next().value); // 3 console.log(iterator.next().done); // true
ジェネレータ関数は return
キーワードを使用して終了し、next()
が呼ばれると done
プロパティが true
になります。