歌舞伎座.tech#7「Reactive Extensions」に参加してきました!
以下、メモ程度ですがメモったものを記しておきます。
Reactive Extensions はじめました @okazukiさん
オブザーバーパターン
監視対象⇄監視者
IObservable⇄Observer
変わった時に通知する
監視される人は状態が変化したら値を発行する
そしたら、監視者が値を受け取って処理をする
IObservable<T>とは→
Push型のコレクション
・イベント
クリック(時系列でイベントが起きる)
・非同期処理(単一処理)
・普通のコレクションも0秒間に一気に値が発行される
コレクションでできること
・フィルタ
・射影(変換)
・合成
↓
マウスイベントを組み合わせる
mousemoveをPush型のコレクションにして
1つ前のコレクションの要素と合成して
mousedownまでスキップする(フィルタ)
mouseupまで拾う
とお絵描きアプリ
Observable Everywhere -Rxの原則とUniRxにみるデータソースの見つけ方 @neueccさん
onnextが0回以上発生した後に
oncompletedかonerrorが発生する
一見無関係のイテレータパターンとオブザーバーパターンに深い関連性がある
Observableの源流が必要
DOM、DBのRowはシーケンスになる
→シーケンスを見出す
Rxをつかうとネストを1段に抑えることができる
→callback地獄の回避
直列処理や並列処理やタイムアウト付与などをメソッドを足すだけで簡単にできる
UIEventもいろんなメソッドを流し込むことができる
ボタン
インプットフィールド
トグル
スライダー
衝突もIObservable<Collection>
ゲームループは毎フレームごとにメソッドが呼び出される
Rx = Observable + LINQ + scheduler
schedulerは時空魔法の、時と空間(実行スレッド...)をコントロール
PollingはIObservableと「見なせる」
ログはInProcessにおいてもStreamとして扱えるべき
nicocasのwebフロントで使ってみた @crexistaさん
http://www.slideshare.net/kaorashibacaki/kabuki-rx2
RxJSの中を追う @wilfremさん
http://www.slideshare.net/wilfrem/tech-rxjs
RxのHot/Cold
Rxが中で何をやっているかがわかればハマりどころを回避できる?
言語ごとの実装に大きな違いはない
「doはColdなObservableだ」
RxはonNextが0個以上
そのあとにonCompleted or onError
オペレーターはObservableを返す
オーペーレータは繋げられる
メッセージはオペーレータに加工されて伝達する
オペレーターがオペレーターをsubscribeする方法とは?
オペレーターはObserverを「生成」する
AnnonimousObservable
Hot=Observerのチェーンを作ること
チェーンを作るからメッセージが流れる
Hotとはsubscribeしてチェーンを作ること
一番先頭まで
タイプ1”非保持型”
Observerを保持しない
何回subscribeしても同じ結果となる
例
大抵のオペレータ
Cold Observable
タイプ2”保持型”
observableをキャプチャする
必要になった時にメッセージを流す
流す対象をリストとして持ち、分配機能を持つ
例
publish, fromEvent, Subject
Hot Observable Hotな性質
SubjectはObserverをリストとして持つ
Observerとしてメッセージを受け取る
Observableとしてメッセージを配信する
すBジェcTを挟むと”保持型”になる
Cold→Hot変換
Rxは中で
(乱暴目に言うと)5つの要素で構成されている
Observableとオペレータ→手前の参照を持つ→Cold
subscribe差し替え
filter
map
Subscribeによって後ろのObserverを知る→Hot
disposeを呼ぶかストリームが終了で消滅
Schedular
実行する関数をイベントキューに積む機構
メッセージの送信タイミングを変えられる
実装方法は言語によって違いはない
RxJSはイベントループに積む/積まないのみ
Schedular.defaultが使える
積む関数は適切に選ばれる
使い所
重たい処理
処理を一息つかせたい時
スレッド切り替え/同期したい時
testing RxJS @erukitiさん
http://www.slideshare.net/erukiti/testing-rxjs
Clean Architectureで設計してRxJSを使った話 @_kondeiさん
http://www.slideshare.net/_kondei/clean-architecturerxjs
iOS+SwiftでFRP @shun_fuさん
Swiftは一番愛されている言語
HotかColdか、完全に無限か潜在的に有限か、を型で表現できるようにしたい
UniRxを使ってみた話 @toRisouPさん
話が頭に入ってこない
UnityでRxが使えるのは本当に素晴らしい
・感想
Rxに関してはざっくりとした理解しかしてなかったんですが、今回でしっかりと理解できたと思います。
概念的な話も、実際に使ってみた話もどれもとても分かりやすく、ためになりました。