reactive extensions

13
Reactive Extensions @yone64

Upload: yone64

Post on 19-Jun-2015

1.249 views

Category:

Technology


4 download

DESCRIPTION

Room Metro #26 の発表資料です。

TRANSCRIPT

Page 1: Reactive extensions

Reactive Extensions@yone64

Page 2: Reactive extensions

たとえば InfoQ

注目のリアクティブプログラミング

http://www.infoq.com/jp/news/2013/09/reactive-programming-emerging

Page 3: Reactive extensions

時間や外部の入力とともに変化する値や計算を、ユーザ自身がプログラムするのではなく、システム(言語自体やライブラリ)がユーザからは見えないところで反応( reactive)してくれるというもの◦よく例に挙げられるのは Excel

Reactive Programmingとは

B2の値が変わると、 C2の値も自動的に変わる

Page 4: Reactive extensions

Reactive Programmingの概念を実現する2つの方法◦値が必要になった時に、毎回計算を行う( Pull型)

描画 Frameごとに実行されるMain Loopがあるプログラム形式向け。

◦ソースが変更されたときに、再計算を行う( Push型)・ Event Drivenなプログラム形式向け。↑ Reactive Extensionsはこちら

Pushと Pull

Page 5: Reactive extensions

Reactive Programmingを関数型の手法で実現する。

時間に変化する値 (behavior)や、時間離散的なイベント( Event)を入力とする

Functional Reactive Programming

3 x => x * 26

x => x * 2

3

4

1

6

8

2

Page 6: Reactive extensions

時間軸に乗ってプログラムの外部からくる値や通知なら何でも◦画面入力◦タイマー通知◦キーボード・マウス操作◦外部センサーの値◦サーバ通信結果◦ etc...

入力として扱えるもの

Page 7: Reactive extensions

Target Framework◦ .NET Framework 4.0 and 4.5◦ .NET for Windows Store apps◦ Silverlight 5◦ Windows Phone 7.1

残念ながら標準ライブラリには含まれていません◦ NuGetでインストールしましょう

ReactiveExtensionsを始めるために

Page 8: Reactive extensions

Observerパターン (GoF)◦ IObservable<T> (変更を通知する側 )

IDisposable Subscribe(IObserver<T> observer); ◦ IObserver<T> (通知を受け取る側)

void OnCompleted(); void OnError(Exception error); void OnNext(T value);

変更通知

Page 9: Reactive extensions

LINQとは◦値の集合 (IEnumerable<T>)に対する集合操作

Rx = IObservable<T> + LINQ◦時間的に離散している値の集合と、それに対する、集合操作

LINQ

Select Where

Select Where

IE<T>

IO<T>

MoveNext/Current

OnNext

Page 10: Reactive extensions

DEMO

Page 11: Reactive extensions

Demo1(サジェスト)◦連続する入力は無視する。◦ Web問い合わせは非同期で行う

UIスレッドを止めない

Demo2( Drag)◦ MouseDownの後に、MouseMoveのイベントを購読◦ MouseUpで購読終了◦ MouseDown座標と、MouseMove座標の組み合わせがほしい

デモメモ

Page 12: Reactive extensions

ReactiveProperty◦ xaml系 UIとの DataBindingと、 IObservable<T>との変換を、いい感じにしてくれるライブラリ。

周辺ライブラリ

Page 13: Reactive extensions

RxJava◦ https://github.com/Netflix/RxJava

RxJS◦ https://github.com/Reactive-Extensions/RxJS

などなど

他言語でも