狠狠撸

狠狠撸Share a Scribd company logo
@yone64
? たとえばInfoQ
http://www.infoq.com/jp/news/2013/09/reactive-programming-emerging
? 時間や外部の入力とともに変化する値や計算を、ユーザ自身
がプログラムするのではなく、システム(言語自体やライブラリ)
がユーザからは見えないところで反応(reactive)してくれると
いうもの
? よく例に挙げられるのはExcel
B2の値が変わると、C2の値も
自動的に変わる
? Reactive Programmingの概念を実現する2つの方
法
? 値が必要になった時に、毎回計算を行う(Pull型)
? 描画Frameごとに実行されるMain Loopがあるプログラム形式
向け。
? ソースが変更されたときに、再計算を行う(Push型)
?Event Drivenなプログラム形式向け。
↑ Reactive Extensionsはこちら
? Reactive Programmingを関数型の手法で実現す
る。
? 時間に変化する値(behavior)や、時間離散的なイベ
ント(Event)を入力とする
3 x => x * 2
6
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でインストールしましょう
? 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
? 時間的に離散している値の集合と、それに対する、集合操作
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
などなど

More Related Content

Reactive extensions