linq to xxxx(reactive extensionsの紹介)

25
Linq to XXXX 第二回 LINQ勉強会 @Posaune 1

Upload: hiroshi-maekawa

Post on 18-Jun-2015

856 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Linq to XXXX(Reactive Extensionsの紹介)

Linq to XXXX

第二回 LINQ勉強会

@Posaune

1

Page 2: Linq to XXXX(Reactive Extensionsの紹介)

自己紹介

Posauneです。@Posauneです。まえかわです。

C#ラブ、F#すげえ、Ruby好き、Powershell好き、Haskellがんばりたい

京都アジャイル勉強会(#京アジャ)やってます。

最近はテストとか品質とかUXとかも好きです。節操がない系エンジニア。

2

Page 3: Linq to XXXX(Reactive Extensionsの紹介)

3

Page 4: Linq to XXXX(Reactive Extensionsの紹介)

資料は来てから作りました

資料は少ないのでコードを沢山書こうと思います

適宜ツッコミをすることにより初めて成立するセッションです

僕もRxは勉強中なので、一緒に勉強しましょ

4

Page 5: Linq to XXXX(Reactive Extensionsの紹介)

Linq to ...

Linq to Object

メモリ上のデータをクエリする

Linq to XML

XMLテキストをクエリする

Linq to SQL (Entity)

DB上のデータを書く

5

Page 6: Linq to XXXX(Reactive Extensionsの紹介)

Linq to ...

基本的に、「同じ型のデータが連なって出てくる」というものならOK

フィルタリング(Where, Take, Skip)

加工(Select)

合成(Zip, SelectMany)

6

Page 7: Linq to XXXX(Reactive Extensionsの紹介)

同じ型のデータが連なるもの・・・?

7

Page 8: Linq to XXXX(Reactive Extensionsの紹介)

Linq to Event

Eventも同じ型のデータが大量に列挙される

だからEventHandlerが使える、ですよね

8

Page 9: Linq to XXXX(Reactive Extensionsの紹介)

とはいえ。。。

Event は非同期呼び出しなので、IEnumerableとは本質的に合わない

同期呼び出し(Pull型)

非同期のものをPullで呼ぶと、いつ終わるかわからないものがメインスレッドに来る

こわい

9

Page 10: Linq to XXXX(Reactive Extensionsの紹介)

Pull型の呼び出し

10

Page 11: Linq to XXXX(Reactive Extensionsの紹介)

そこでIObservable!

Push型の列挙を行う

非同期列挙

最初に、「これが起きたらどうするか」を登録しておき、実際に発生した時に呼び出される、というイメージ。

11

Page 12: Linq to XXXX(Reactive Extensionsの紹介)

Push型の呼び出し

12

Page 13: Linq to XXXX(Reactive Extensionsの紹介)

Reactive Extensions!

IObservable / IObserver は.NET標準クラス

でも、実装したクラスは存在しない!

実装したクラスを簡単に作るのが、Reactive Extensions

略称:Rx

13

Page 14: Linq to XXXX(Reactive Extensionsの紹介)

まず基本から

Observableなデータソースをとりあえず作ってみる。

Observable.Rangeメソッド

Subject<T>型

14

Page 15: Linq to XXXX(Reactive Extensionsの紹介)

HotとCold

ObservableにもHotとColdがある

Hot:”動的”なIObservable

何が起こるのかは繋いでみないとわからない

すべてのつないだものに同じ列挙をPushする

Cold:”静的”なIObservable

つないだ瞬間に発火する

何が起こるか事前に決まっている

つないだもの毎に列挙をPushする

15

Page 16: Linq to XXXX(Reactive Extensionsの紹介)

HotとColdは時間余ったらデモします

16

Page 17: Linq to XXXX(Reactive Extensionsの紹介)

いよいよEventにつなぐ

Observable.FromEventというのがあるのです

17

Page 18: Linq to XXXX(Reactive Extensionsの紹介)

Linq to Event

大量のデータをLinq的メソッドチェーンによりさばける

見やすい(鍛えれば)

書きやすい(慣れれば)

イベントの登録・解除も楽に

ラムダでも解除できるよ!

イベントのモックが簡単にできるようになる!

UI系の単体テストが書きやすくなる

System.Reactive.Testあたりを参照すべし

イベントがFirst Classオブジェクトに!

18

Page 19: Linq to XXXX(Reactive Extensionsの紹介)

さて何しましょう?

最初はマウスイベントをもう少しガッツリやろうかとおもっていた

D&Dとかも割とスッキリ書ける

昨日見たセッションビデオが面白くてですね…

19

Page 20: Linq to XXXX(Reactive Extensionsの紹介)

Curing Your Event Processing Blues with Reactive Extensions

20

Page 21: Linq to XXXX(Reactive Extensionsの紹介)

ホントはKINECTでやりたいお(´・ω・`)

でもKINECT高いんだお(´;ω;`)

だからLEAPでやるお!(`・ω・´)

21

Page 22: Linq to XXXX(Reactive Extensionsの紹介)

DEMO:LeapでRx!

22

Page 23: Linq to XXXX(Reactive Extensionsの紹介)

まとめ

Rx:Linq to Event

Event処理を簡潔に書けるようになる、かも

Eventだけじゃなく、非同期にデータが飛んでくるものにはなんでも有効

23

Page 24: Linq to XXXX(Reactive Extensionsの紹介)

学習リソース

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

Page 25: Linq to XXXX(Reactive Extensionsの紹介)

おまけ:Interactive Extensions

Rxで便利げだったものがIEnumerableに逆輸入されたもの

略称Ix

便利らしいけれど、殆ど見れていない…

@gushwellさんの学習リソース:http://gushwell.ldblog.jp/archives/52257023.html

http://www.nuget.org/packages/Ix_Experimental-Main/

25