Linq to XXXX(Reactive Extensionsの紹介)
-
Upload
hiroshi-maekawa -
Category
Technology
-
view
856 -
download
1
description
Transcript of Linq to XXXX(Reactive Extensionsの紹介)
Linq to XXXX
第二回 LINQ勉強会
@Posaune
1
自己紹介
Posauneです。@Posauneです。まえかわです。
C#ラブ、F#すげえ、Ruby好き、Powershell好き、Haskellがんばりたい
京都アジャイル勉強会(#京アジャ)やってます。
最近はテストとか品質とかUXとかも好きです。節操がない系エンジニア。
2
3
資料は来てから作りました
資料は少ないのでコードを沢山書こうと思います
適宜ツッコミをすることにより初めて成立するセッションです
僕もRxは勉強中なので、一緒に勉強しましょ
4
Linq to ...
Linq to Object
メモリ上のデータをクエリする
Linq to XML
XMLテキストをクエリする
Linq to SQL (Entity)
DB上のデータを書く
5
Linq to ...
基本的に、「同じ型のデータが連なって出てくる」というものならOK
フィルタリング(Where, Take, Skip)
加工(Select)
合成(Zip, SelectMany)
6
同じ型のデータが連なるもの・・・?
7
Linq to Event
Eventも同じ型のデータが大量に列挙される
だからEventHandlerが使える、ですよね
8
とはいえ。。。
Event は非同期呼び出しなので、IEnumerableとは本質的に合わない
同期呼び出し(Pull型)
非同期のものをPullで呼ぶと、いつ終わるかわからないものがメインスレッドに来る
こわい
9
Pull型の呼び出し
10
そこでIObservable!
Push型の列挙を行う
非同期列挙
最初に、「これが起きたらどうするか」を登録しておき、実際に発生した時に呼び出される、というイメージ。
11
Push型の呼び出し
12
Reactive Extensions!
IObservable / IObserver は.NET標準クラス
でも、実装したクラスは存在しない!
実装したクラスを簡単に作るのが、Reactive Extensions
略称:Rx
13
まず基本から
Observableなデータソースをとりあえず作ってみる。
Observable.Rangeメソッド
Subject<T>型
14
HotとCold
ObservableにもHotとColdがある
Hot:”動的”なIObservable
何が起こるのかは繋いでみないとわからない
すべてのつないだものに同じ列挙をPushする
Cold:”静的”なIObservable
つないだ瞬間に発火する
何が起こるか事前に決まっている
つないだもの毎に列挙をPushする
15
HotとColdは時間余ったらデモします
16
いよいよEventにつなぐ
Observable.FromEventというのがあるのです
17
Linq to Event
大量のデータをLinq的メソッドチェーンによりさばける
見やすい(鍛えれば)
書きやすい(慣れれば)
イベントの登録・解除も楽に
ラムダでも解除できるよ!
イベントのモックが簡単にできるようになる!
UI系の単体テストが書きやすくなる
System.Reactive.Testあたりを参照すべし
イベントがFirst Classオブジェクトに!
18
さて何しましょう?
最初はマウスイベントをもう少しガッツリやろうかとおもっていた
D&Dとかも割とスッキリ書ける
昨日見たセッションビデオが面白くてですね…
19
Curing Your Event Processing Blues with Reactive Extensions
20
ホントはKINECTでやりたいお(´・ω・`)
でもKINECT高いんだお(´;ω;`)
だからLEAPでやるお!(`・ω・´)
21
DEMO:LeapでRx!
22
まとめ
Rx:Linq to Event
Event処理を簡潔に書けるようになる、かも
Eventだけじゃなく、非同期にデータが飛んでくるものにはなんでも有効
23
学習リソース
neueccさんのBlog:http://neue.cc/category/programming/rx
okazukiさんのBlog:http://okazuki.hatenablog.com/entry/20120324/1330956809
xin9leさんのBlog:http://xin9le.net/rx-intro
動画
http://channel9.msdn.com/Blogs/codefest/DC2010T0100-Keynote-Rx-curing-your-asynchronous-programming-blues
http://channel9.msdn.com/Events/TechEd/Europe/2012/DEV413
24
おまけ:Interactive Extensions
Rxで便利げだったものがIEnumerableに逆輸入されたもの
略称Ix
便利らしいけれど、殆ど見れていない…
@gushwellさんの学習リソース:http://gushwell.ldblog.jp/archives/52257023.html
http://www.nuget.org/packages/Ix_Experimental-Main/
25