SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
for JSDeferred
    Code Reading
Kenichirou Oyama (k1LoW)
What's JSDeferrd
   • JavaScript非同期/同期ライブラ
     リ
       –Author id:cho45
   • とにかくすごい




TechTouch #0b10                      2
JSDeferrd ex1
   Deferred
      .next(function(){
               two();
               //2
               return '2';
           })
      .next(function(x){
               alert(x);//>2
               three();
               //3
           });
   one();
   //1

TechTouch #0b10                   3
JSDeferrd ex2
   Deferred
      .next(function(){
               two();
               //2
               Deferrd.ng('error');
           })
      .next(function(res){
               three();
               //スルー
           })
      .error(function(e){
                alert(e);//>'error'
               //3
            });
   one();
   //1



TechTouch #0b10                        4
JSDeferrd Code Reading
   • JSDeferrdを効果的に使用するた
     めにはソースを読む必要があるら
     しい。
   • 各地でJSDeferred Code Reading
     開催
       –Roppongi.JS
       –Kanasan.JS
   • ソースコードはわずか400行弱
TechTouch #0b10                    5
TechTouch #0b10   6
next_default()
   Deferred.next_default = function (fun)
     {
     var d = new Deferred();
     var id = setTimeout(function ()
     { d.call() }, 0);
     d.canceller = function ()
     { clearTimeout(id) };
     if (fun) d.callback.ok = fun;
     return d;
   };

TechTouch #0b10                             7
?




TechTouch #0b10       8
意味不明




TechTouch #0b10          9
for JSDeferrd Code Reading
   • まずはJavaScriptを理解する必要
     がある。
       –setTimeout()
         •非同期
       –Method Chain
         •jQueryでも重要
       –Error Handling
TechTouch #0b10                    10
setTimeout()




TechTouch #0b10                  11
setTimeout()
   • タイマーイベント
   setTimeout("alert('three')",3000);
   alert('one');
   setTimeout("alert('two')",1000);




TechTouch #0b10                         12
setTimeout()
   • イベントを割り当てる>イベント
     発火まではユーザ側にハンドリン
     グが戻る
       –wait()やsleep()もブラウザに負荷
        をかけず作成可能




TechTouch #0b10                  13
Method Chain




TechTouch #0b10                  14
Method Chain
   var Hoge={
      call:function (str){
         console.log(str); return this;
      },
      callcall:function (str){
         console.log(str);console.log(str); return this;
      }
   }


   Hoge.call('a').callcall('b');//>   abb
TechTouch #0b10                                            15
jQuery/jQuery Plugin
   (function($) {
     // $.tag
     $.tag = function(name) {
       return jQuery('<' + name + ' />');
     };
     // tag
     $.fn.tag = function(name) {
       var self = this;
       return self.pushStack($.tag(name));
     };
     // gat
     $.fn.gat = function() {
       var self = this;
       return self.end().append(self);       Method Chain
     };
   })($); // function($)



TechTouch #0b10                                             16
JSDeferred Code Readingまでの
                 道は遠い




TechTouch #0b10                    17
Help!




TechTouch #0b10           18

Contenu connexe

Tendances

イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術Kohsuke Yuasa
 
Androidの入力システム
Androidの入力システムAndroidの入力システム
Androidの入力システムmagoroku Yamamoto
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外higaki
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorialkocha2012
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, WorldNaohiro Aota
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Takefumi MIYOSHI
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
Boost9 session
Boost9 sessionBoost9 session
Boost9 sessionfreedom404
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外higaki
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutinemelpon
 
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときunique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときShintarou Okada
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外higaki
 

Tendances (20)

イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
 
Androidの入力システム
Androidの入力システムAndroidの入力システム
Androidの入力システム
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
0x300
0x3000x300
0x300
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorial
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
Testman
TestmanTestman
Testman
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
Boost9 session
Boost9 sessionBoost9 session
Boost9 session
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
コルーチンの使い方
コルーチンの使い方コルーチンの使い方
コルーチンの使い方
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときunique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
mishimasyk#4
mishimasyk#4mishimasyk#4
mishimasyk#4
 

En vedette

Small Stuff
Small StuffSmall Stuff
Small Stuffpulgara
 
CakePHP DB Schema/Model Info Plugin
CakePHP DB Schema/Model Info PluginCakePHP DB Schema/Model Info Plugin
CakePHP DB Schema/Model Info PluginKenichirou Oyama
 
Human Joy!
Human Joy!Human Joy!
Human Joy!pulgara
 
CakePHPゆとり開発環境
CakePHPゆとり開発環境CakePHPゆとり開発環境
CakePHPゆとり開発環境Kenichirou Oyama
 

En vedette (7)

Small Stuff
Small StuffSmall Stuff
Small Stuff
 
Nature
NatureNature
Nature
 
Fukuoka Emacs #X02
Fukuoka Emacs #X02Fukuoka Emacs #X02
Fukuoka Emacs #X02
 
CakePHP DB Schema/Model Info Plugin
CakePHP DB Schema/Model Info PluginCakePHP DB Schema/Model Info Plugin
CakePHP DB Schema/Model Info Plugin
 
Human Joy!
Human Joy!Human Joy!
Human Joy!
 
Fantasticno
FantasticnoFantasticno
Fantasticno
 
CakePHPゆとり開発環境
CakePHPゆとり開発環境CakePHPゆとり開発環境
CakePHPゆとり開発環境
 

Similaire à for JSDeferred Code Reading

J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかHisashi Aruji
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Flow.js
Flow.jsFlow.js
Flow.jsuupaa
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.specKent Ohashi
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01nagachika t
 
知って得するC#
知って得するC#知って得するC#
知って得するC#Shota Baba
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2DToshiyuki Ienaga
 

Similaire à for JSDeferred Code Reading (20)

Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているか
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Flow.js
Flow.jsFlow.js
Flow.js
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.spec
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
Slide
SlideSlide
Slide
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 

Plus de Kenichirou Oyama

Plus de Kenichirou Oyama (8)

Yet Another Plugins
Yet Another PluginsYet Another Plugins
Yet Another Plugins
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
anything-php-funcref-perl.el
anything-php-funcref-perl.elanything-php-funcref-perl.el
anything-php-funcref-perl.el
 
はじめてのanything-c-source-*
はじめてのanything-c-source-*はじめてのanything-c-source-*
はじめてのanything-c-source-*
 
Tokyo Tyrant + PHP
Tokyo Tyrant + PHPTokyo Tyrant + PHP
Tokyo Tyrant + PHP
 
git-svn intro
git-svn introgit-svn intro
git-svn intro
 
CakePHP Console Application 拡張Tips
CakePHP Console Application 拡張TipsCakePHP Console Application 拡張Tips
CakePHP Console Application 拡張Tips
 
Emacs Lisp 紹介
Emacs Lisp 紹介Emacs Lisp 紹介
Emacs Lisp 紹介
 

for JSDeferred Code Reading

  • 1. for JSDeferred Code Reading Kenichirou Oyama (k1LoW)
  • 2. What's JSDeferrd • JavaScript非同期/同期ライブラ リ –Author id:cho45 • とにかくすごい TechTouch #0b10 2
  • 3. JSDeferrd ex1 Deferred .next(function(){ two(); //2 return '2'; }) .next(function(x){ alert(x);//>2 three(); //3 }); one(); //1 TechTouch #0b10 3
  • 4. JSDeferrd ex2 Deferred .next(function(){ two(); //2 Deferrd.ng('error'); }) .next(function(res){ three(); //スルー }) .error(function(e){ alert(e);//>'error' //3 }); one(); //1 TechTouch #0b10 4
  • 5. JSDeferrd Code Reading • JSDeferrdを効果的に使用するた めにはソースを読む必要があるら しい。 • 各地でJSDeferred Code Reading 開催 –Roppongi.JS –Kanasan.JS • ソースコードはわずか400行弱 TechTouch #0b10 5
  • 7. next_default() Deferred.next_default = function (fun) { var d = new Deferred(); var id = setTimeout(function () { d.call() }, 0); d.canceller = function () { clearTimeout(id) }; if (fun) d.callback.ok = fun; return d; }; TechTouch #0b10 7
  • 10. for JSDeferrd Code Reading • まずはJavaScriptを理解する必要 がある。 –setTimeout() •非同期 –Method Chain •jQueryでも重要 –Error Handling TechTouch #0b10 10
  • 12. setTimeout() • タイマーイベント setTimeout("alert('three')",3000); alert('one'); setTimeout("alert('two')",1000); TechTouch #0b10 12
  • 13. setTimeout() • イベントを割り当てる>イベント 発火まではユーザ側にハンドリン グが戻る –wait()やsleep()もブラウザに負荷 をかけず作成可能 TechTouch #0b10 13
  • 15. Method Chain var Hoge={ call:function (str){ console.log(str); return this; }, callcall:function (str){ console.log(str);console.log(str); return this; } } Hoge.call('a').callcall('b');//> abb TechTouch #0b10 15
  • 16. jQuery/jQuery Plugin (function($) { // $.tag $.tag = function(name) { return jQuery('<' + name + ' />'); }; // tag $.fn.tag = function(name) { var self = this; return self.pushStack($.tag(name)); }; // gat $.fn.gat = function() { var self = this; return self.end().append(self); Method Chain }; })($); // function($) TechTouch #0b10 16
  • 17. JSDeferred Code Readingまでの 道は遠い TechTouch #0b10 17