Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Reactive android

4,831 views

Published on

Reactive Programming with Android

Published in: Engineering
  • Login to see the comments

Reactive android

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

×