reactive extensions
DESCRIPTION
Room Metro #26 の発表資料です。TRANSCRIPT
Reactive Extensions@yone64
たとえば InfoQ
注目のリアクティブプログラミング
http://www.infoq.com/jp/news/2013/09/reactive-programming-emerging
時間や外部の入力とともに変化する値や計算を、ユーザ自身がプログラムするのではなく、システム(言語自体やライブラリ)がユーザからは見えないところで反応( reactive)してくれるというもの◦よく例に挙げられるのは Excel
Reactive Programmingとは
B2の値が変わると、 C2の値も自動的に変わる
Reactive Programmingの概念を実現する2つの方法◦値が必要になった時に、毎回計算を行う( Pull型)
描画 Frameごとに実行されるMain Loopがあるプログラム形式向け。
◦ソースが変更されたときに、再計算を行う( Push型)・ Event Drivenなプログラム形式向け。↑ Reactive Extensionsはこちら
Pushと Pull
Reactive Programmingを関数型の手法で実現する。
時間に変化する値 (behavior)や、時間離散的なイベント( Event)を入力とする
Functional Reactive Programming
3 x => x * 26
x => x * 2
3
4
1
6
8
2
時間軸に乗ってプログラムの外部からくる値や通知なら何でも◦画面入力◦タイマー通知◦キーボード・マウス操作◦外部センサーの値◦サーバ通信結果◦ etc...
入力として扱えるもの
Target Framework◦ .NET Framework 4.0 and 4.5◦ .NET for Windows Store apps◦ Silverlight 5◦ Windows Phone 7.1
残念ながら標準ライブラリには含まれていません◦ NuGetでインストールしましょう
ReactiveExtensionsを始めるために
Observerパターン (GoF)◦ IObservable<T> (変更を通知する側 )
IDisposable Subscribe(IObserver<T> observer); ◦ IObserver<T> (通知を受け取る側)
void OnCompleted(); void OnError(Exception error); void OnNext(T value);
変更通知
LINQとは◦値の集合 (IEnumerable<T>)に対する集合操作
Rx = IObservable<T> + LINQ◦時間的に離散している値の集合と、それに対する、集合操作
LINQ
Select Where
Select Where
IE<T>
IO<T>
MoveNext/Current
OnNext
DEMO
Demo1(サジェスト)◦連続する入力は無視する。◦ Web問い合わせは非同期で行う
UIスレッドを止めない
Demo2( Drag)◦ MouseDownの後に、MouseMoveのイベントを購読◦ MouseUpで購読終了◦ MouseDown座標と、MouseMove座標の組み合わせがほしい
デモメモ
ReactiveProperty◦ xaml系 UIとの DataBindingと、 IObservable<T>との変換を、いい感じにしてくれるライブラリ。
周辺ライブラリ
RxJava◦ https://github.com/Netflix/RxJava
RxJS◦ https://github.com/Reactive-Extensions/RxJS
などなど
他言語でも