エッジなWebエンジニアのためのブラウザー情報源
Chrome 39で追加されたGenerators機能とは
11月18日に公開されたChrome 39安定版の新機能を紹介。C#やRubyでおなじみのyieldキーワードが使えるようになった。
2014年11月18日にChrome 39が安定版として公開された(※バージョン38からは約1カ月ぶりのアップデート)。本稿では、Chrome 39で追加された機能について説明していく。
Chrome 39で実装された全機能は、Chromium Dashboard(図1.1)に公開されている。
Chrome 39リリースでは、セキュリティアップデートやMacの64bitサポートなどが提供されているが、安定した機能として実装されたのは(緑色のバーが表示されている機能)、Generatorsと呼ばれるES6(=ECMAScript 6、すなわちJavaScript)の新機能だけである。
Generators(ジェネレーター)
Generatorsとは、C#やRubyなどでおなじみのyield
キーワードを使って、実行の中断や復帰が可能になる構文である。
さっそくサンプルコードを使って説明していこう。
function* generator(){
for(var i=0; i<5; i++){
yield i;
}
}
|
※関数名をgenerator
としているが、これは任意の名前でよい。
function*
(functionのあとにアスタリスク)でGenerators関数であることを宣言している。また、yield
キーワードを使って、関数の途中で値を返している。
では、これを呼び出してみよう。
yield
で数値が順番に返されて、戻ってきた値をconsole.log()
で出力している。
Generatorsはオブジェクトを返す
Generatorsでは、単純に値を返しているわけではなく、実はオブジェクトを返している(図2.2)。
オブジェクトが返されていることが分かる。
このようにnext()
メソッドを呼び出すと、値(value
)と、処理が最後まで実施されたかどうかのフラグ(done
)が返されていることが分かる。
Generatorsには値を渡せる
Generatorsでは、値を受け取れるだけでなく、渡すこともできる(図2.3)。
このコードでは、Generatorsの関数であるfunc()
に“10”を渡しているため、最初のnext()
メソッドの呼び出しに対応する一つ目のyield
では、これに1を加算した“11”が返ってきている。
次のnext()
メソッドには“8”を渡しているため、この値が変数y
にセットされて、二つ目のyieldではこれに1を加算した“9”が返されている。
このように一連の処理を中断して値を返すだけでなく、対話的に値を受け渡すこともできようになる。
1. Chrome 38で<picture>要素のメディアクエリ対応と、JavaScriptのMap/Setオブジェクト&for-ofループ機能追加
<picture>要素ではレスポンシブUIに使えるメディアクエリが記述できるようになった。JavaScriptではコレクション用のMap/Setオブジェクトや、値を受け取って順次処理できるfor-ofループが追加された。