4GCEVKXG#PFTQKF
#IGPFC 
! 
• Reactive Programmingって何? 
• Android で使えるの? 
• 実際に作ってみる 
• まとめ
4GCEVKXG2TQITCOOKPI闋闎∶獑
䧕訳闁闳闐 
⚮㊽䥥防陈阋附阺陎阋
“Reactive Programmingは 
データフローと変化の伝播を中心とした 
プログラミングパラダイムである” 
–Wiki (意訳)
“FRPは非同期データストリームを用いる 
プログラミングである” 
–@andrestaltz
“Reactive Programmingとは 
Reactive Programming的考え方を 
実現するプログラミング手法のこと” 
–Kugimiya 
プログラミング手法の話をしているのに、 
名前のない考え方を 
内包しているので伝えにくい
4GCEVKXG2TQITCOOKPI䥥勤閰㢚 
闐闗獑 
データの流れや変化が自動でインタラクティブに 
Viewなどに反映させる考え方
1, こんな状態 
≬閰闘閻闻闒㐀闀 
2, B2に =A1+A2をいれると 
3, 加算されて3が表示される 
4, A2を4に変更する 
5, B2が反応して5になる!!
閻间闺銙䛟闁闳䎛闓㧕闓箞㹫闒Ⅼ闺勤閰闳 
ストリームという概念で物事をとらえる。 
 ストリームとは、 
時間順に並んだ進行中のイベントの列 
time 
です。 
1つのストリーム 
イベントイベントイベントイベント
time 
ストリームを考える事で、 
A1に1 A2に2 A1に3 
B2を1 B2を3 B2を4 
反応(Reactive)できる! 
注: 画像はイメージです。 
パフォーマンスがあがる訳ではありません
㡕䛧闁闳闐 
Reactive Programmingとは 
データの流れや変化が自動でインタラクティブに 
Viewなどに反映させる考え方を 
実現する為に 
物事をストリームでとらえて 
プログラミングする手法 
です
闉闒闧闓珯珯珯
4GCEVKXG2TQITCOKPI闖∮剏闍閹闗 
㐀屻䥥闓閻闻闒㐀闀 
・オブジェクト指向 
・関数型> ・MVC 
・MVVM > Reactive 
 
(=) 
Programming 
デザイン 
パターン> スニペット
4GCEVKXG2TQITCOOKPI闗 
#PFTQKF闏≠閰闳闖獑
≠閰闦闁
4Z#PFTQKF闺瞪⑆闁闳閻闐闏伂☹闓 
4GCEVKXG2TQITCOOKPI闏銙蜐閴闏閵闦闁 
RxAndroidとはRxJavaのAndroid Moduleです。 
RxJavaはJavaでReactive Programmingを行う為の 
ライブラリです。
瞪⑆闗伂☹ 
Gradleファイルに下記を書くだけ
銙楼闓∽闋闎闧闳猳
伂☹闒闪闖闺∽闋闎闧闳镩 
【仕様】 
ボタン1かボタン2を 
押すと 
カウントが1増える。 
! 
それだけ。
4GCEVKXG2TQITCOOKPI闋闥閷勤閰闎闧闳 
time 
InputAのストリーム 
クリック 
time 
InputBのストリーム 
time 
見るべきのストリーム 
クリッククリッククリック 
二つをmerge! 
クリッククリック 
クリッククリッククリッククリッククリッククリック
4GCEVKXG2TQITCOOKPI闋闥閷勤閰闎闧闳 
time 
見るべきストリーム 
表示表示表示表示表示表示 
ストリームを監視してoutputに出力する
銙蜐猳 
InputAのストリームを作成 
InputBのストリームを作成 
ストリームをmerge! 
Rx○○ではObserverパターンを適用していて、 
ストリームが監視対象のため 
ストリームの事をObservableと読んでます。
屬闳闡閵阔阣际閥阻闺簬屷閿闎 
QWVRWV闓孉䰛闁闳 
subscribeで監視し、 
Actionにイベント追加時の処理を書く
伂☹闒闪闖闺∽闋闎闧闳镪 
【仕様】 
outputに常に 
A と Bの加算された値が 
表示される。 
! 
ただそれだけ。
4GCEVKXG2TQITCOOKPI闋闥閷勤閰闎闧闳 
time 
値変更 
InputAのストリーム 
値変更値変更値変更 
time 
値変更 
InputBのストリーム 
値変更 
time 
値変更 
見るべきのストリーム 
値変更値変更値変更値変更値変更 
merge!!
time 
OGTIG閿闇⬕⛩珮閻閮闒闳 
Bの値変更 
見るべきのストリーム 
Aの値変更Bの値変更Aの値変更Aの値変更Aの値変更 
19 1 20 22 5 9 
19 + ?を表示?+5を表示 
欲しいのは両方の値!
EQODKPG.CVGUV闺≠閲閮 
time 
値変更 
InputAのストリーム 
値変更値変更値変更 
time 
値変更 
InputBのストリーム 
値変更 
combineLatest! 
time 
値変更 
見るべきのストリーム 
値変更値変更値変更値変更値変更
ㄙ闓闪閮䔨㢚闖磷砒闖闿阴陎阣闐 
time 
阖阞阣闓閿闎閷间闳 
値変更 
見るべきのストリーム 
値変更値変更値変更値変更値変更 
表示表示表示表示表示表示 
これで加算が可能。 
あとはこのストリームを監視してoutputに出力するだけ
銙蜐猳 
InputAのストリームを作成 
InputBのストリームを作成
⛩∴猳 
見るべきストリームを作成 
combineLatestを使って合体する
屬闳闡閵阔阣际閥阻闺簬屷閿闎 
QWVRWV闓孉䰛闁闳 
subscribeで監視し、 
Actionにイベント追加時の処理を書く
↷闓闗閵闋闐閻闻闒Ⅼ闓≠閰闳 

闖闏闗闒閳闵閮閳 
・/QFGN%QPVTQNNGT闖闌闒閶 
・*VVR聆⋂闖际阊阃阔阣陇阔阸陎阔 
闒闑闒闑 
闐闗閬閰珮 
'XGT[VJKPIKUUVTGCO闱閿閬闖闏闒闻闏闪閬閹闳闗闂珯
闦闐闩
・4GCEVKXG2TQITCOKPI闋闎∶闆闬闺䛧缷閿闒閬闐 
ֺ哋ⓧ閴∶閿闎闳閳闰閷闷閳闱闒閬珮㨍㈴闓 
! 
・倱⼡阸闿陎阣闗∶闺阔阣际閥阻闐闁闳閳闈闐㋾閮 
! 
・∶闺阔阣际閥阻闐閿闎㕒閮閳闒闑闖 
ֺ阴阔阣防附阊阡闾阔闗闦闈闧闻闒㴂倃ℎ㐀

Reactive android