linq to xxxx(reactive extensionsの紹介)

Post on 18-Jun-2015

856 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

2013/08/24のLinq勉強会 #2での資料です。

TRANSCRIPT

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

top related