Generators
ジェネレータ関数は function* で宣言し、yield キーワードで値を逐次生成します。イテレータプロトコルに準拠し、for...of で反復できます。
概要
ジェネレータ関数は function* で宣言し、yield キーワードで値を逐次生成します。イテレータプロトコルに準拠し、for...of で反復できます。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 39 | 13 | 26 | 10 | 39 | 10 | |
| next() は Generator インスタンスのメソッドで、2 つのプロパティ done と value を持つオブジェクトを返します。 next メソッドに引数を提供して、ジェネレーターへ値を送ることもできます。 | 39 | 13 | 26 | 10 | 39 | 10 |
| return() は Generator インスタンスのメソッドで、ジェネレーターの本体内で、現在の停止位置に return 文が挿入されたかのように振る舞い、これによりジェネレーターが完了します。また、try...finally ブロックと組み合わせることで、ジェネレーターがクリーンアップ処理を実行することができるようにします。 | 50 | 13 | 38 | 10 | 50 | 10 |
| throw() は Generator インスタンスのメソッドで、ジェネレーターの本体内で、現在の停止位置に throw 文が挿入されたかのように振る舞い、ジェネレーターがエラー状態にあることを知らせ、エラーを処理したり、クリーンアップ処理を行って自分自身を閉じたりすることができるようにします。 | 39 | 13 | 26 | 10 | 39 | 10 |
| その他 | ||||||
| GeneratorFunction オブジェクトは、ジェネレーター関数のメソッドを提供します。JavaScript では、すべてのジェネレーター関数は実際には GeneratorFunction オブジェクトです。 | 39 | 13 | 26 | 10 | 39 | 10 |
| ビルトインオブジェクト | ||||||
| GeneratorFunction() コンストラクターは、 GeneratorFunction オブジェクトを生成します。 | 39 | 13 | 26 | 10 | 39 | 10 |
| その他 | ||||||
| `関数*` 式 | 49 | 12 | 26 | 10 | 49 | 10 |
| 演算子 | ||||||
trailing comma パラメータの末尾のカンマ | 58 | 79 | 52 | 10 | 58 | 10 |
| その他 | ||||||
| yield 演算子は、ジェネレーター関数を一時停止したり再開したりするために使用します。 | 39 | 12 | 26 | 10 | 39 | 10 |
| 「収量*」 | 39 | 12 | 27 | 10 | 39 | 10 |
| `関数*` ステートメント | 39 | 13 | 26 | 10 | 39 | 10 |
| ステートメント | ||||||
IteratorResult object `IteratorResult` オブジェクトをスローする代わりに | 49 | 13 | 29 | 10 | 49 | 10 |
not constructable with new 「new」では構築できません (ES2016) | 50 | 13 | 43 | 10 | 50 | 10 |
trailing comma in parameters パラメータの末尾のカンマ | 58 | 14 | 52 | 10 | 58 | 10 |
- Firefox 33 から、`yield` 式の解析が ES2015 仕様に準拠するように更新されました。
- Firefox 29 から、完了したジェネレータ関数に対して `IteratorResult` オブジェクトが返されるようになりました。
- Firefox 33 から、`yield` 式の解析が ES2015 仕様に準拠するように更新されました。
基本構文
function* fibonacci() {
let [a, b] = [0, 1];
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
const fib = fibonacci();
fib.next().value; // 0
fib.next().value; // 1
fib.next().value; // 1
fib.next().value; // 2 ライブデモ
steprungenerator
Processing one timeStop, one timebetween per and to next. Value generatesimul-tion.. with yield
実務での使いどころ
-
Generators の活用
イテレータを生成する特殊な関数。yield で値を逐次返し、遅延評価を実現する。
注意点
- 特になし。すべての主要ブラウザで安定して動作する。
アクセシビリティ
- JavaScript による動的更新時は、aria-live リージョンで変更をスクリーンリーダーに通知する。
参考リンク
Powered by web-features