JavaScript/next()
表示
next()
[編集]next() は、JavaScript のジェネレータオブジェクトで使用されるメソッドで、ジェネレータ関数の実行を制御し、次の yield で指定された値を返します。ジェネレータ関数は一時停止可能な関数であり、next() メソッドを呼び出すことで、関数の実行を再開することができます。
構文
[編集]generatorObject.next([value]);
next() メソッドは、引数として任意の値を受け取ります。この値は、yield 式によってジェネレータ関数に渡されます。
使用例
[編集]基本的な使用例
[編集]function* numbers() { yield 1; yield 2; yield 3; } const gen = numbers(); console.log(gen.next().value); // 1 console.log(gen.next().value); // 2 console.log(gen.next().value); // 3 console.log(gen.next().done); // true
この例では、numbers ジェネレータ関数が順番に `1`、`2`、`3` を yield し、next() メソッドを使ってジェネレータを進めています。最後の next() の呼び出しで done が true になり、ジェネレータが終了したことがわかります。
function* process() { const value = yield 'Start'; console.log('Received:', value); yield 'End'; } const gen = process(); console.log(gen.next().value); // 'Start' gen.next('Received value'); // 'Received: Received value' console.log(gen.next().value); // 'End'
next() に渡された引数は、ジェネレータ関数内での yield 式に渡されます。この例では、`next('Received value')` が value に渡され、console.log で出力されます。
next() メソッドは、結果としてオブジェクトを返します。このオブジェクトは、ジェネレータが終了したかどうかを示す done プロパティを持っています。
function* count() { yield 1; yield 2; return 'done'; } const counter = count(); console.log(counter.next()); // { value: 1, done: false } console.log(counter.next()); // { value: 2, done: false } console.log(counter.next()); // { value: 'done', done: true } console.log(counter.next()); // { value: undefined, done: true }
この例では、next() が呼ばれるたびに、ジェネレータは一時停止し、次の値を返します。最後の呼び出しで done プロパティが true になり、ジェネレータが終了したことが示されます。
ジェネレータの制御
[編集]next() メソッドを使うことで、ジェネレータ関数の実行を細かく制御することができます。yield によって一時停止した関数の実行を、必要に応じて再開したり、値を渡したりできます。
使用の注意点
[編集]next()メソッドは、ジェネレータ関数を一時停止するyield式がある位置まで実行し、その時点でvalueとdoneプロパティを含むオブジェクトを返します。- ジェネレータ関数は、一度終了した後は再度実行することはできません。終了したジェネレータに対して
next()を呼び出しても、常に `{ value: undefined, done: true }` が返されます。 next()に引数を渡すことで、yieldに値を送信できます。この送信された値は、yield式が評価される際に使われます。