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
式が評価される際に使われます。