SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
ML	
  	
  Nagoya	
  
2012/05/26


                       1
自己紹介




       2
LINQってなんぞ?




             3
LINQ	
  で何が出来るか。




                   4
クエリ構文


string[]#names#=#{#"ニャル子",#"クー子",## #    #
#     #       #      "ハス太",#"シャンタッ君",#"まひろ"#};#

IEnumerable<string>#query#=#from#name#in#names#

##########################where#name.Last()#==#' '#

##########################select#name;#

foreach#(string#name#in#query){Console.WriteLine(name);}#

#
                                                            5
メソッドチェイン


  string[]#names#=#{#"ニャル子",#"クー子",#    #               #        #
#        #         #"ハス太",#"シャンタッ君",#"まひろ"#};#

 IEnumerable<string>#query2#=#names#

 ##.Where(x#=>#x.Last()#==#‘太’)#

 ##.Select(x#=>#x);#

 foreach#(string#name#in#query2)#{#Console.WriteLine(name);#}#


                                                                     6
§ 用法用量を	
  
 守って正しく	
  
 使い分けましょう。


               7
More	
  Effective…?

   § LINQ	
  で、More	
  Effective	
  って言ったらなんだろ
      う?	
  
   § Visual	
  Studio	
  11	
  、Windows	
  8もでるよね!	
  
   § Rx(Reactive	
  Extensions)	
  ?	
  
   § Ix	
  …	
  ?	
  




                                                          8
9
Rx	
  (Reactive	
  Extensions)
公式サイト
§ The	
  Reactive	
  Extensions	
  (Rx)...	
  
§ ...is	
  a	
  library	
  to	
  compose	
  asynchronous	
  and	
  event-­‐based	
  
   programs	
  	
  
§ using	
  observable	
  collections	
  and	
  LINQ-­‐style	
  query	
  
   operators.


ì  The	
  Reactive	
  Extensions	
  (Rx)...	
  

ì  非同期とイベントベースプログラムを組み合わせるライブラリ	
  

ì  観察可能なコレクションとLINQスタイルのクエリ演算子を使う

                                                                                        10
Rx	
  ってなんぞ?
§ Reactive	
  Extension	
  
§ 非同期処理と、イベント駆動プログラムを、
   observable	
  collection	
  と	
  LINQ	
  のクエリ演算子で扱
   えるようにしたMSのライブラリ。	
  
§ イベントや、時間をシーケンス(連続した列)を
   して考えたものを処理していく。	
  
§ IEnumerable<T>	
  ではなく、IObservable<T>	
  と
   IObserver<T>が使われる。	
  


                                                        11
どうして、Rx	
  があるのか
§ 次期Windows	
  OS(Windows8)では、非同期プログ
   ラミングを強制させられる。	
  
§ C#	
  5.0	
  では、async	
  /	
  await	
  構文が追加。	
  
   § かなり、簡単に非同期処理が書ける。




                                                       12
Rx	
  (IObservable<T>,	
  IObserver<T>)と	
  
今までのLINQ	
  	
  
(IEnumerable<T>,	
  IEnumrator<T>)との違い

§ IEnumerable<T>:	
  	
  元からあるコレクション(集合)を
   処理する	
  

§ IObservable<T>:	
  イベントや、時間、非同期のものを
   処理する。	
  
     §  Observable.Range	
  があるけど…	
  
§ どちらも、LINQ	
  クエリ演算子を使える。	
  



                                               13
Rx	
  のコード例
    § 今回のRxのサンプルは、よくあるマウスイベント
       の合成です。
var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$
$$.Sample(TimeSpan.FromSeconds(2))$
$$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$
$$.ObserveOnDispatcher()$
$$.Subscribe($
$$$$x$=> drawSomething(x),$
$$$$ex$=>$Console.Write(ex.Message),$
$$$$()$=>$Console.Write("end")$
$$);$
                                                                           14
Rx	
  のコード例
    § 今回のRxのサンプルは、よくあるマウスイベント
       の合成です。
var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$
$$.Sample(TimeSpan.FromSeconds(2))$
               実際に合成しているメソッド
$$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$
$$.ObserveOnDispatcher()$     UIスレッドで処理をする
$$.Subscribe($
$$$$x$=> drawSomething(x),$     シーケンスが読み込まれた際のメソッド
$$$$ex$=>$Console.Write(ex.Message),$     例外が吐かれた際に呼ばれる
$$$$()$=>$Console.Write("end")$
$$);$                                 シーケンスが読み込み終わった際に呼ばれる

                                                                           15
§ C#を使うときに、	
  
  LINQ(IEnumerable)	
  や、	
  
  Rx	
  (IObservable)	
  を使うと、	
  
  プログラミングが楽しくなりますよ!	
  




                                     16

Weitere ähnliche Inhalte

Was ist angesagt?

Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】株式会社ランチェスター
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外higaki
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
BMXUG ブロックチェーンハンズオン 20190622
BMXUG ブロックチェーンハンズオン 20190622BMXUG ブロックチェーンハンズオン 20190622
BMXUG ブロックチェーンハンズオン 20190622Kohei Nishikawa
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18Syo Ikeda
 
Rxに入門しようとしている
Rxに入門しようとしているRxに入門しようとしている
Rxに入門しようとしているonotchi_
 
Web dbの監視
Web dbの監視Web dbの監視
Web dbの監視ii012014
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたfurandon_pig
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptYoshifumi Kawai
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】株式会社ランチェスター
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にYoshifumi Kawai
 
Postgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpgPostgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpgToshi Harada
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocketkoichik
 

Was ist angesagt? (20)

Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
BMXUG ブロックチェーンハンズオン 20190622
BMXUG ブロックチェーンハンズオン 20190622BMXUG ブロックチェーンハンズオン 20190622
BMXUG ブロックチェーンハンズオン 20190622
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
 
Rxに入門しようとしている
Rxに入門しようとしているRxに入門しようとしている
Rxに入門しようとしている
 
Web dbの監視
Web dbの監視Web dbの監視
Web dbの監視
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
 
Postgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpgPostgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpg
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocket
 

Andere mochten auch

PFDS 9.3.2
PFDS 9.3.2PFDS 9.3.2
PFDS 9.3.2rf0444
 
Os Keyshacks
Os KeyshacksOs Keyshacks
Os Keyshacksoscon2007
 
George Saliaris Faseas at Open Coffee Athens XVI
George Saliaris Faseas at Open Coffee Athens XVIGeorge Saliaris Faseas at Open Coffee Athens XVI
George Saliaris Faseas at Open Coffee Athens XVIGeorge Tziralis
 
Adventures In Copyright Reform
Adventures In Copyright ReformAdventures In Copyright Reform
Adventures In Copyright Reformoscon2007
 
Os Fitzpatrick Sussman
Os Fitzpatrick SussmanOs Fitzpatrick Sussman
Os Fitzpatrick Sussmanoscon2007
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swposcon2007
 
Os Ellistutorial
Os EllistutorialOs Ellistutorial
Os Ellistutorialoscon2007
 
Share point 2013 distributed cache
Share point 2013 distributed cacheShare point 2013 distributed cache
Share point 2013 distributed cacheMichael Nokhamzon
 
Creating A Language Editor Using Dltk
Creating A Language Editor Using DltkCreating A Language Editor Using Dltk
Creating A Language Editor Using DltkKaniska Mandal
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdatedoscon2007
 
Railsconf2007
Railsconf2007Railsconf2007
Railsconf2007oscon2007
 

Andere mochten auch (20)

PFDS 9.3.2
PFDS 9.3.2PFDS 9.3.2
PFDS 9.3.2
 
Quick Sort
Quick SortQuick Sort
Quick Sort
 
Alpro : Quick sort
Alpro : Quick sortAlpro : Quick sort
Alpro : Quick sort
 
Os Keyshacks
Os KeyshacksOs Keyshacks
Os Keyshacks
 
George Saliaris Faseas at Open Coffee Athens XVI
George Saliaris Faseas at Open Coffee Athens XVIGeorge Saliaris Faseas at Open Coffee Athens XVI
George Saliaris Faseas at Open Coffee Athens XVI
 
Os Bowkett
Os BowkettOs Bowkett
Os Bowkett
 
Adventures In Copyright Reform
Adventures In Copyright ReformAdventures In Copyright Reform
Adventures In Copyright Reform
 
Os Sharp
Os SharpOs Sharp
Os Sharp
 
Os Fitzpatrick Sussman
Os Fitzpatrick SussmanOs Fitzpatrick Sussman
Os Fitzpatrick Sussman
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swp
 
Os Lamothe
Os LamotheOs Lamothe
Os Lamothe
 
Os Ellistutorial
Os EllistutorialOs Ellistutorial
Os Ellistutorial
 
Os Django
Os DjangoOs Django
Os Django
 
Yuicss R7
Yuicss R7Yuicss R7
Yuicss R7
 
Share point 2013 distributed cache
Share point 2013 distributed cacheShare point 2013 distributed cache
Share point 2013 distributed cache
 
Creating A Language Editor Using Dltk
Creating A Language Editor Using DltkCreating A Language Editor Using Dltk
Creating A Language Editor Using Dltk
 
Os Alrubaie
Os AlrubaieOs Alrubaie
Os Alrubaie
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdated
 
Railsconf2007
Railsconf2007Railsconf2007
Railsconf2007
 
Mlw
MlwMlw
Mlw
 

Ähnlich wie MlnagoyaRx

関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaWebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaKazuhiro Hara
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsShogo Sensui
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』H2O Space. Co., Ltd.
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介fukuoka.ex
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1NISHIMOTO Keisuke
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTterurou
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 

Ähnlich wie MlnagoyaRx (20)

関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaWebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LT
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 

MlnagoyaRx

  • 1. ML    Nagoya   2012/05/26 1
  • 5. クエリ構文 string[]#names#=#{#"ニャル子",#"クー子",## # # # # # "ハス太",#"シャンタッ君",#"まひろ"#};# IEnumerable<string>#query#=#from#name#in#names# ##########################where#name.Last()#==#' '# ##########################select#name;# foreach#(string#name#in#query){Console.WriteLine(name);}# # 5
  • 6. メソッドチェイン string[]#names#=#{#"ニャル子",#"クー子",# # # # # # #"ハス太",#"シャンタッ君",#"まひろ"#};# IEnumerable<string>#query2#=#names# ##.Where(x#=>#x.Last()#==#‘太’)# ##.Select(x#=>#x);# foreach#(string#name#in#query2)#{#Console.WriteLine(name);#}# 6
  • 7. § 用法用量を   守って正しく   使い分けましょう。 7
  • 8. More  Effective…? § LINQ  で、More  Effective  って言ったらなんだろ う?   § Visual  Studio  11  、Windows  8もでるよね!   § Rx(Reactive  Extensions)  ?   § Ix  …  ?   8
  • 9. 9
  • 10. Rx  (Reactive  Extensions) 公式サイト § The  Reactive  Extensions  (Rx)...   § ...is  a  library  to  compose  asynchronous  and  event-­‐based   programs     § using  observable  collections  and  LINQ-­‐style  query   operators. ì  The  Reactive  Extensions  (Rx)...   ì  非同期とイベントベースプログラムを組み合わせるライブラリ   ì  観察可能なコレクションとLINQスタイルのクエリ演算子を使う 10
  • 11. Rx  ってなんぞ? § Reactive  Extension   § 非同期処理と、イベント駆動プログラムを、 observable  collection  と  LINQ  のクエリ演算子で扱 えるようにしたMSのライブラリ。   § イベントや、時間をシーケンス(連続した列)を して考えたものを処理していく。   § IEnumerable<T>  ではなく、IObservable<T>  と IObserver<T>が使われる。   11
  • 12. どうして、Rx  があるのか § 次期Windows  OS(Windows8)では、非同期プログ ラミングを強制させられる。   § C#  5.0  では、async  /  await  構文が追加。   § かなり、簡単に非同期処理が書ける。 12
  • 13. Rx  (IObservable<T>,  IObserver<T>)と   今までのLINQ     (IEnumerable<T>,  IEnumrator<T>)との違い § IEnumerable<T>:    元からあるコレクション(集合)を 処理する   § IObservable<T>:  イベントや、時間、非同期のものを 処理する。   §  Observable.Range  があるけど…   § どちらも、LINQ  クエリ演算子を使える。   13
  • 14. Rx  のコード例 § 今回のRxのサンプルは、よくあるマウスイベント の合成です。 var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$ $$.Sample(TimeSpan.FromSeconds(2))$ $$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$ $$.ObserveOnDispatcher()$ $$.Subscribe($ $$$$x$=> drawSomething(x),$ $$$$ex$=>$Console.Write(ex.Message),$ $$$$()$=>$Console.Write("end")$ $$);$ 14
  • 15. Rx  のコード例 § 今回のRxのサンプルは、よくあるマウスイベント の合成です。 var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$ $$.Sample(TimeSpan.FromSeconds(2))$ 実際に合成しているメソッド $$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$ $$.ObserveOnDispatcher()$ UIスレッドで処理をする $$.Subscribe($ $$$$x$=> drawSomething(x),$ シーケンスが読み込まれた際のメソッド $$$$ex$=>$Console.Write(ex.Message),$ 例外が吐かれた際に呼ばれる $$$$()$=>$Console.Write("end")$ $$);$ シーケンスが読み込み終わった際に呼ばれる 15
  • 16. § C#を使うときに、   LINQ(IEnumerable)  や、   Rx  (IObservable)  を使うと、   プログラミングが楽しくなりますよ!   16