Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
エッジなWebエンジニアのためのブラウザー情報源

エッジなWebエンジニアのためのブラウザー情報源

Chrome 39で追加されたGenerators機能とは

2014年12月22日

11月18日に公開されたChrome 39安定版の新機能を紹介。C#やRubyでおなじみのyieldキーワードが使えるようになった。

尾崎 義尚
  • このエントリーをはてなブックマークに追加

 2014年11月18日にChrome 39が安定版として公開された(バージョン38からは約1カ月ぶりのアップデート)。本稿では、Chrome 39で追加された機能について説明していく。

 Chrome 39で実装された全機能は、Chromium Dashboard(図1.1)に公開されている。

図1.1 Chrome 39リリース時点のChromium Dashboard

 Chrome 39リリースでは、セキュリティアップデートやMacの64bitサポートなどが提供されているが、安定した機能として実装されたのは(緑色のバーが表示されている機能)、Generatorsと呼ばれるES6(=ECMAScript 6、すなわちJavaScript)の新機能だけである。

Generators(ジェネレーター)

 Generatorsとは、C#やRubyなどでおなじみのyieldキーワードを使って、実行の中断や復帰が可能になる構文である。

 さっそくサンプルコードを使って説明していこう。

JavaScript
function* generator(){
  for(var i=0; i<5; i++){
    yield i;
  }
}
リスト2.1 Generatorsのyieldキーワードの使用例

関数名をgeneratorとしているが、これは任意の名前でよい。

 function*(functionのあとにアスタリスク)でGenerators関数であることを宣言している。また、yieldキーワードを使って、関数の途中で値を返している。

 では、これを呼び出してみよう。

図2.1 Chromeのコンソールでgenerator()関数を呼び出したところ
図2.1 Chromeのコンソールでgenerator()関数を呼び出したところ

 yieldで数値が順番に返されて、戻ってきた値をconsole.log()で出力している。

Generatorsはオブジェクトを返す

 Generatorsでは、単純に値を返しているわけではなく、実はオブジェクトを返している(図2.2)。

図2.2 Generatorsのnext()メソッドを呼び出したところ
図2.2 Generatorsのnext()メソッドを呼び出したところ

オブジェクトが返されていることが分かる。

 このようにnext()メソッドを呼び出すと、値(value)と、処理が最後まで実施されたかどうかのフラグ(done)が返されていることが分かる。

Generatorsには値を渡せる

 Generatorsでは、値を受け取れるだけでなく、渡すこともできる(図2.3)。

図2.3 yieldで値を受け取るだけでなく、next()メソッドに値を渡すことができる。

 

図2.3 yieldで値を受け取るだけでなく、next()メソッドに値を渡すことができる。

 このコードでは、Generatorsの関数であるfunc()に“10”を渡しているため、最初のnext()メソッドの呼び出しに対応する一つ目のyieldでは、これに1を加算した“11”が返ってきている。

 次のnext()メソッドには“8”を渡しているため、この値が変数yにセットされて、二つ目のyieldではこれに1を加算した“9”が返されている。

 このように一連の処理を中断して値を返すだけでなく、対話的に値を受け渡すこともできようになる。

エッジなWebエンジニアのためのブラウザー情報源
1. Chrome 38で<picture>要素のメディアクエリ対応と、JavaScriptのMap/Setオブジェクト&for-ofループ機能追加

<picture>要素ではレスポンシブUIに使えるメディアクエリが記述できるようになった。JavaScriptではコレクション用のMap/Setオブジェクトや、値を受け取って順次処理できるfor-ofループが追加された。

エッジなWebエンジニアのためのブラウザー情報源
2. 【現在、表示中】≫ Chrome 39で追加されたGenerators機能とは

11月18日に公開されたChrome 39安定版の新機能を紹介。C#やRubyでおなじみのyieldキーワードが使えるようになった。

サイトからのお知らせ

Twitterでつぶやこう!