投稿者 tel | 2014年2月11日

ECMAScript6のGeneratorを使ってみる

Firefox27でES6のGeneratorに対応したみたいなので試してみた。

http://wiki.ecmascript.org/doku.php?id=harmony:generators&s=generator

function* square() {
    var x = 1;
    while(1) { yield x * x; x++; }
}
var i = square();
i.next().value; // 1
i.next().value; // 4
i.next().value; // 9

functionの後ろにアスタリスクをつけるとGeneratorになる。関数の途中でyieldを呼び出すと関数を中断できる。

yieldの後ろにアスタリスクをつけると他のGeneratorを呼び出すことができる。

// nフレーム待つ
function* wait(n) {
    for(; n; n--) {
        yield n;
    }
}

var i = function*() {
    console.log('10フレームウェイト');
    yield* wait(10);
    console.log('5フレームウェイト');
    yield* wait(5);
    console.log('おわり');
}();

// タイマーで呼び出し
var timer = setInterval(function() {
    if(i.next().done) {
        clearInterval(timer);
    }
}, 1000 / 10);

http://jsdo.it/sapphire_al2o3/kNAR

上記を実行すると間を置いてログが表示される。
この機能を使えばゲームのシーケンシャルな演出とかが楽に作れそう。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。