We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

概要

Generator オブジェクトは ジェネレーター関数 によって返され、iterable プロトコルiterator プロトコル の両方に従います。

構文

function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"

メソッド

Generator.prototype.next()
yield 式によって得られる値を返します。
Generator.prototype.return()
与えられた値を返し、ジェネレーターを終了します。
Generator.prototype.throw()
エラーをジェネレーターにスローします。

無限イテレーター

function* idMaker(){
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...

レガシージェネレーターオブジェクト

Firefox (SpiderMonkey) は JavaScript 1.7 で、ジェネレーター初期バージョンも実装しています。これは関数の宣言でアスタリスク (*) を必要としません (関数の本体で yield キーワードを使用するだけです)。しかしながら、レガシージェネレーターは非推奨です。使用しないで下さい; 削除される予定です (バグ 1083482)。

レガシージェネレーターメソッド

Generator.prototype.next()
yield 式によって得られる値を返します。 これは ES6 ジェネレーターオブジェクトの next() と一致します。
Generator.prototype.close()
ジェネレーターを閉じます。そのため、next() をコールすると、StopIteration エラーがスローされます。これは ES6 ジェネレーターオブジェクトの return() メソッドに一致します。
Generator.prototype.send()
ジェネレーターに値を送るために使われます。yield 式から値が返され、次の yield 式によって値を返します。send(x) は ES6 ジェネレーターオブジェクトの next(x) に一致します。
Generator.prototype.throw()
ジェネレーターにエラーをスローします。これはES6ジェネレーターオブジェクトの throw() に一致します。

レガシージェネレーターの例

function fibonacci() {
  var a = yield 1;
  yield a * 2;
}

var it = fibonacci();
console.log(it);          // "Generator {  }"
console.log(it.next());   // 1
console.log(it.send(10)); // 20
console.log(it.close());  // undefined
console.log(it.next());   // throws StopIteration (as the generator is now closed)

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Generator objects の定義
標準 初回定義。
ECMAScript Latest Draft (ECMA-262)
Generator objects の定義
ドラフト  

ブラウザー実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応391326 なし あり10
next391326 なし あり10
return501338 なし3710
throw391326 なし あり10
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり1326 あり10 あり
next あり あり1326 あり10 あり
return ?501338 あり105.0
throw あり あり1326 あり10 あり

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 未サポート (有) 未サポート 未サポート 未サポート
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 未サポート 未サポート (有) 未サポート 未サポート 未サポート

関連情報

レガシージェネレーター

ES6 ジェネレーター

ドキュメントのタグと貢献者

このページの貢献者: Uemmra3, hotstaff, vyv03354, dskmori, Javascipt, shide55
最終更新者: Uemmra3,