JavaScript/ジェネレータ

JavaScript/ジェネレータ

JavaScript1.7 からの機能

簡単に言うとビデオの再生とポーズができるリモコン付き関数を作ることができるようになったと。

基本

まずポーズする位置のマーカーを仕込んだ関数を作成する。つまりEclipseのデバッガーでのブレークポイントのようなやつだ。 function* というちょっと普通の function と違うキーワードで宣言する。

function* hoge(){
    console.log("1");
    yield 2;
    console.log("3");
    yield 4;
    console.log("5");
    return 6;
}

この途中に仕込まれたyieldキーワードの位置で関数を一時停止することができる。 凄いのはこの一時停止時点で戻り値が取れることと、停止状態なのに関数の内部状態は保持されていること。

それでは動かしてみる。まずリモコンを取得する

var a = hoge();

この a に入っているオブジェクトを通じて関数をリモコンする。

console.log(a.next()); //=> 1 2
console.log(a.next()); //=> 3 4
console.log(a.next()); //=> 5 6

となる。外側の実行とオブジェクトの実行が交互になっているのがわかる。 さらにその時点での引数も帰ってくる・・・

と、考えるならば・・・こいつを

javascript/basic/generators.txt · 最終更新: 2019-06-10 12:22 by ore