狠狠撸

狠狠撸Share a Scribd company logo
4GCEVKXG#PFTQKF
#IGPFC 
! 
? Reactive Programmingって何? 
? Android で使えるの? 
? 実際に作ってみる 
? まとめ
4骋颁贰痴碍齿骋2罢蚕滨罢颁翱翱碍笔滨闋闎∶獑
?訳闁闳闐 
???防陈阋附阺陎阋
“Reactive Programmingは 
データフローと変化の伝播を中心とした 
プログラミングパラダイムである” 
–Wiki (意訳)
“FRPは非同期データストリームを用いる 
プログラミングである” 
–@andrestaltz
“Reactive Programmingとは 
Reactive Programming的考え方を 
実現するプログラミング手法のこと” 
–Kugimiya 
プログラミング手法の話をしているのに、 
名前のない考え方を 
内包しているので伝えにくい
4GCEVKXG2TQITCOOKPI?勤閰? 
闐闗獑 
データの流れや変化が自動でインタラクティブに 
痴颈别飞などに反映させる考え方
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とは 
データの流れや変化が自動でインタラクティブに 
痴颈别飞などに反映させる考え方を 
実現する為に 
物事をストリームでとらえて 
プログラミングする手法 
です
闉闒闧闓珯珯珯
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で監視し、 
础肠迟颈辞苍にイベント追加时の処理を书く
伂?闒闪闖闺∽闋闎闧闳镪 
【仕様】 
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で監視し、 
础肠迟颈辞苍にイベント追加时の処理を书く
?闓闗閵闋闐閻闻闒?闓≠閰闳 

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

More Related Content

Reactive android