SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
The generator of ES6
id:paulownia / @nullpon
2013/12/19

koa 0.1.0 release
koa

•

node.jsのWebアプリケーションフレームワーク

•

ECMAScript 6thのgeneratorを使用
Generator ?
generator

•

イテレータを生成する特殊な関数。
Iterator ?
Iterator

•

ECMAScript 6thで導入

•

反復処理を行うためのオブジェクト
var arr = [3, 4, 5, 6];
!

for (var i of arr) {
console.log(i);
}

// => 3, 4, 5, 6
Iteratorを自作
function range(a, b) {
var i = a;
return {
iterator: function() {
return this;
},
next: function() {
if (i <= b) {
return { value: i++ };
} else {
return { done: true };
}
}

}
}
!

for (var i of range(3, 6)) {
console.log(i);
// => 3, 4, 5, 6
}
Generatorで書き直す
function* range(a, b) {
for (var i = a; i <= b; i++) {

yield i;

}
}
!

for (var i of range(3, 6)) {
console.log(i);
// => 3, 4, 5, 6
}
Generatorの挙動
// Generator関数定義
function* f(i) {
var x;

x = yield 1;
// x => "a"
x = yield 2;
// x => "b"
x = yield 3;
// x => "c"
}





// Generator関数実行
// この時点ではGenerator関数のコードは実行されない
var g = f(0);
// g => [Object: Generator]
// nextを呼ぶと、Generator関数のコードが実行される
var x;

x = g.next();
// x => {value:1, done:false}
x = g.next("a"); // x => {value:2, done:false}
x = g.next("b"); // x => {value:3, done:false}
x = g.next("c"); // x => {done:true}
•

Generator#nextを呼び出す

→ Generator関数の最初のyield式まで実行される

→ yield式を評価し、Generator関数は停止する

→ 制御がnextを呼び出した側に戻る

•

さらにGenertor#nextを呼び出す

→ 中断位置から次のyield式まで実行

→ yield式を評価し、Generator関数は再度停止する

→ 制御がnextを呼び出した側に戻る
yield式を評価して中断

↓
非同期処理の制御に使えそうだ…
var g = (function* (i) {
console.log(i);
// すぐに 1 が出力
i = yield setTimeout(function() {
g.next(2);
}, 1000);
console.log(i);
// 1秒待って 2 が出力
!

i = yield setTimeout(function() {
g.next(3);
}, 1000);
console.log(i);
// 1秒待って 3 が出力
})(1);
!

g.next();
まとめ

•

ジェネレータで非同期処理ができる

•

本来は反復処理のための機能

•

node 0.12で使えるようになるらしい

(node 0.11はES6 draftと実装が異なる)

Contenu connexe

Similaire à The Generator of ECMAScript 6th

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
Takuya Tsuchida
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
Yuji Takayama
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
 

Similaire à The Generator of ECMAScript 6th (20)

JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
Node.js勉強会 Framework Koa
Node.js勉強会 Framework KoaNode.js勉強会 Framework Koa
Node.js勉強会 Framework Koa
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験
 
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
JavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, PerformanceJavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, Performance
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
 
Jetpack Composeのパフォーマンスの基本
Jetpack Composeのパフォーマンスの基本Jetpack Composeのパフォーマンスの基本
Jetpack Composeのパフォーマンスの基本
 
Inside Frontend 2 #insideFE
Inside Frontend 2 #insideFEInside Frontend 2 #insideFE
Inside Frontend 2 #insideFE
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 

The Generator of ECMAScript 6th