Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
RxJava学習のベストプラクティスっぽいもの
yagi
March 17, 2015
Technology
21
15k
RxJava学習のベストプラクティスっぽいもの
yagi
March 17, 2015
Tweet
Share
More Decks by yagi
See All by yagi
sys1yagi
36
24k
sys1yagi
17
9.2k
sys1yagi
12
6.9k
sys1yagi
43
18k
sys1yagi
8
870
sys1yagi
3
19k
sys1yagi
18
7.8k
sys1yagi
4
470
sys1yagi
1
3.7k
Other Decks in Technology
See All in Technology
kadoppe
1
140
fortkle
0
450
bolonio
4
560
asahi_k2
0
730
p1ass
15
5.6k
kenya888
1
110
aizurage
0
120
maekawa123
0
520
tutsunom
1
330
sat
1
260
hmatsu47
1
160
yashi8484
0
120
Featured
See All Featured
kneath
294
39k
jcasabona
8
590
malarkey
119
16k
paulrobertlloyd
72
1.5k
lara
590
61k
danielanewman
2
550
dougneiner
119
8k
orderedlist
PRO
330
36k
tenderlove
53
3.5k
kneath
220
15k
lemiorhan
628
47k
keithpitt
402
20k
Transcript
3Y+BWBֶशͷϕετϓϥΫςΟεͬΆ͍ͷ 2015/03/17(Ր) ീ
3Y+BWBJTUPPIVHF
4UFQCZTUFQMFBSOJOH
4UFQCZTUFQBQQMJDBUJPO
w ֓೦ w ֓೦ͷ+BWBԽ w ίϨΫγϣϯૢ࡞ w 1SPNJTF w -JGU
w 4VCKFDU 3Y+BWB͜ͷॱͰֶʂʁ
3Y+BWBͱ https://rx.codeplex.com/ https://github.com/ReactiveX/RxJava
w 3FBDUJWF&YUFOTJPOT 3Y ɺ؍ଌՄೳ PCTFSWBCMF ͳγʔέϯεͱ-*/2ελΠϧͷΫ ΤϦԋࢉࢠΛͬͯɺඇಉظͳΠϕϯτϕʔεͷϓ ϩάϥϜΛ߹͢ΔϥΠϒϥϦͰ͢ɻ3YΛ͏ͱɺ ։ൃऀඇಉظσʔλετϦʔϜΛ0CTFSWBCMF Ͱද͠ɺඇಉظσʔλετϦʔϜʹର͢ΔΫΤϦ
ʹ-*/2ԋࢉࢠΛ͍ɺඇಉظετϦʔϜͷฒߦ ੑΛ4DIFEVMFSͰύϥϝλԽ͠·͢ɻ؆୯ʹݴ͑ ɺ3Y0CTFSWBCMF -*/2 4DIFEVMFSͰ͢ɻ 3Y+BWBͱ http://okapies.hateblo.jp/entry/2015/03/04/031148
w 0CTFSWBCMFͱ࣌ؒUʹྲྀΕΔ4USFBNͰ͋Δ ֓೦
w 0CTFSWBCMFͱ࣌ؒUʹྲྀΕΔ4USFBNͰ͋Δ ֓೦ Event Array Async ͲΕ࣌ؒUʹྲྀΕΔ4USFBNͱͯ͠ߟ͑Δ
w &WFOUϢʔβ͕ૢ࡞ͨ࣌͠ U ͳͲʹൃՐ͢ΔΠϕϯτ w "TZODඇಉظॲཧ͕ྃ U ͨ͠ΒൃՐ͢ΔΠϕϯτ w "SSBZ֤ཁૉͷִؒ
U ͕ݶΓͳ͘ʹ͍ۙΠϕϯτ ֓೦
֓೦ ؔΛద༻ Ͱ͖Δ มɺ߹ɺ࿈݁ɺϑΟϧλɺࠐΈɺಉظɺඇಉظ
֓೦ͷ+BWBԽ
֓೦ͷ+BWBԽ ࣌ؒUΛྲྀΕΔJOUFHFSͷTUSFBN 0CTFSWBCMF*OUFHFSDPVOUFSDSFBUF$PVOUFS
֓೦ͷ+BWBԽ ࣌ؒUΛྲྀΕΔJOUFHFSͷTUSFBN 0CTFSWBCMF*OUFHFSDPVOUFSDSFBUF$PVOUFS 1 2 3 4
֓೦ͷ+BWBԽ ؍ଌ͢Δ DPVOUFSTVCTDSJCF OFX"DUJPO*OUFHFS \ !0WFSSJEF QVCMJDWPJEDBMM *OUFHFSJOUFHFS \ EPTPNFUIJOH
^ ^
֓೦ͷ+BWBԽ ؍ଌ͢Δ DPVOUFSTVCTDSJCF OFX"DUJPO*OUFHFS \ !0WFSSJEF QVCMJDWPJEDBMM *OUFHFSJOUFHFS \ EPTPNFUIJOH
^ ^ 1 2 3 4
֓೦ͷ+BWBԽ ࣌ؒUΛྲྀΕΔ5PVDI&WFOUͷTUSFBN 0CTFSWBCMF5PVDI&WFOUUPVDIFTWJFXUPVDIFT Down Move Move Up
֓೦ͷ+BWBԽ ؔΛద༻͢Δ 0CTFSWBCMF5PVDI&WFOUUPVDI&WFOU.PWF UPVDIFTpMUFS OFX'VOD5PVDI&WFOU #PPMFBO \ !0WFSSJEF QVCMJD#PPMFBODBMM 5PVDI&WFOUUPVDI&WFOU
\ SFUVSOUPVDI&WFOUUZQF .PWF ^ ^ Down Move Move Up Move Move
֓೦ͷ+BWBԽ ؔΛద༻͢Δ 0CTFSWBCMF4USJOHUPVDI&WFOU-PH UPVDIFTNBQ OFX'VOD5PVDI&WFOU 4USJOH \ !0WFSSJEF QVCMJD4USJOHDBMM 5PVDI&WFOUUPVDI&WFOU
\ SFUVSOUPVDI&WFOUUP4USJOH ^ ^ Down Move Move Up “Move” “Move” “Down” “Up”
0CTFSWBCMFͷϊϦΘ͔ͬͨɻ ͡Ό͋۩ମతʹԿʹ͏ͷʁ
w 0CTFSWBCMFϦονͳ*UFSBUPSͰ͋Δɻ ίϨΫγϣϯૢ࡞
w 0CTFSWBCMF3FDJQFSFDJQFT0CTFSWBCMFGSPN SFDJQF-JTU w 0CTFSWBCMF*OUFHFSDPVOUFS0CTFSWBCMFSBOHF w
ίϨΫγϣϯΛ0CTFSWBCMFԽ QVCMJDDMBTT999"EBQUFSFYUFOET"SSBZ"EBQUFS5\ QVCMJD0CTFSWBCMF5JUFNT \ SFUVSO0CTFSWBCMF SBOHF HFU$PVOU NBQ JHFU*UFN J XJOEPX HFU$PVOU UP#MPDLJOH TJOHMF ^ ^
͋ͱԿͰΓ์ 0CTFSWBCMF3FDJQFIJTUPSZ0CTFSWBCMFGSPN IJTUPSZ-JTU 0CTFSWBCMF4USJOHJETIJTUPSZ NBQ OFX'VOD3FDJQF -POH \ !0WFSSJEF
QVCMJD-POHDBMM 3FDJQFSFDJQF \ SFUVSOSFDJQFHFU*E ^ ^ MJNJU SFEVDF OFX'VOD4USJOH -POH 4USJOH \ !0WFSSJEF QVCMJD4USJOHDBMM 4USJOHT -POHJE \ SFUVSO TOVMM JEUP4USJOH ^ ^ 4USJOHJET4USJETUP#MPDLJOH TJOHMF
͋ͱԿͰΓ์ 0CTFSWBCMF3FDJQFIJTUPSZ0CTFSWBCMFGSPN IJTUPSZ-JTU 0CTFSWBCMF4USJOHJETIJTUPSZ NBQ OFX'VOD3FDJQF -POH \ !0WFSSJEF
QVCMJD-POHDBMM 3FDJQFSFDJQF \ SFUVSOSFDJQFHFU*E ^ ^ MJNJU SFEVDF OFX'VOD4USJOH -POH 4USJOH \ !0WFSSJEF QVCMJD4USJOHDBMM 4USJOHT -POHJE \ SFUVSO TOVMM JEUP4USJOH ^ ^ 4USJOHJET4USJETUP#MPDLJOH TJOHMF 3FDJQF-POH ࠷େ݅ l zͰ࿈݁ ΛऔΓग़͢
ίϨΫγϣϯૢ࡞ͰϦεΫֶश w ίϨΫγϣϯૢ࡞ʹద༻ͯ͠ϦεΫͰಋೖɻҰ୴ 3Y+BWBਥԽ࣮ͯ͠গͳ͍ɻ w ౷Ұతͳه๏ΛֶͿɺద༻ՕॴΛݕ౼͢Δ w Մಡੑͷߴ͍3Y+BWBίʔυΛࡧ͢Δ ྫ͑લทͷSFEVDFDPNNPOTMBOHͷ 4USJOH6UJMTKPJOΛͬͨํ͕Α͘ͳ͍ʁͱ͔ͳΜͱ͔
w ςετίʔυॻ͖Ͱࢼ͢ͱΔ
׳Ε͖ͯͨͧɺͬͱ࣮༻ੑΛʂ
w 0CTFSWBCMF1SPNJTFͰ͋Δ 1SPNJTF
1SPNJTFͭͷΛ࣋ͭ 0CTFSWBCMF http://ninjinkun.hatenablog.com/entry/introrxja
4DIFEVMFSͰεϨουΛม͑Δ result Observer 5ISFBE .BJO5ISFBE
&SSPSIBOEMJOH Observer 5ISFBE .BJO5ISFBE
ͭͷΛ࣋ͭ0CTFSWBCMFΛ࡞Δ QVCMJD0CTFSWBCMF3FDJQFSFDJQF pOBMMPOHSFDJQF*E \ SFUVSO0CTFSWBCMFDSFBUF OFX0CTFSWBCMF0O4VCTDSJCF3FDJQF \ !0WFSSJEF QVCMJDWPJEDBMM 4VCTDSJCFS
TVQFS3FDJQFTVCTDSJCFS \ USZ\ 3FDJQFSFDJQFMPBE3FDJQF SFDJQF*E TVCTDSJCFSPO/FYU SFDJQF TVCTDSJCFSPO$PNQMFUFE ^DBUDI &YDFQUJPOF \ TVCTDSJCFSPO&SSPS F ^ ^ ^ ^
4DIFEVMFSΛηοτ͢Δ 0CTFSWBCMF3FDJQFSFDJQF0CTFSWBCMFSFDJQF JE SFDJQF0CTFSWBCMF TVCTDSJCF0O 4DIFEVMFSTJP PCTFSWF0O "OESPJE4DIFEVMFSTNBJO5ISFBE
0CTFSWBCMFͷॲཧεϨου 0CTFSWFSͷॲཧεϨου ˞"OESPJE4DIFEVMFST3Y"OESPJE͕ఏڙ͢ΔΫϥε
ΤϥʔϋϯυϦϯά͢Δ SFDJQF0CTFSWBCMFTVCTDSJCF OFX"DUJPO3FDJQF \ !0WFSSJEF QVCMJDWPJEDBMM 3FDJQFSFDJQF \ TVDDFTT
TIPX3FDJQF SFDJQF ^ ^ OFX"DUJPO5ISPXBCMF \ !0WFSSJEF QVCMJDWPJEDBMM 5ISPXBCMFUISPXBCMF \ FSSPS TIPX&SSPS UISPXBCMF ^ ^ OFX"DUJPO \ !0WFSSJEF QVCMJDWPJEDBMM \ DPNQMFUF IJEF1SPHSFTT ^ ^ ˞͜ΕΒ෦తʹ4VCTDSJCFSʹϥοϓ͞Ε͍ͯΔɻ4VCTDSJCFSΛ͍͍͕ͯ͠MBNCEBΛߟ͑Δͱݸผͷํ͕͍͍ͱࢥ͏
͞Β"TZOD5BTL http://qiita.com/KeithYokoma/items/1120ea1aacd6841d4e4d ༁ʳ"TZOD5BTLͱ"TZOD5BTL-PBEFSΛSY0CTFSWBCMFʹஔ͖͑Δ3Y+BWB"OESPJE1BUUFSOT 4VCTDSJQUJPOTVCTDSJQUJPO4VCTDSJQUJPOTFNQUZ !0WFSSJEF QSPUFDUFEWPJEPO$SFBUF \ TVCTDSJQUJPO"OESPJE0CTFSWBCMF UIJT
SFDJQF JE TVCTDSJCF0O 4DIFEVMFSTJP NBQ TVCTDSJCF ^ !0WFSSJEF QSPUFDUFEWPJEPO%FTUSPZ \ TVQFSPO%FTUSPZ TVCTDSJQUJPOVOTVCTDSJCF ^
1SPNJTFԽͰ͞ΑͳΒ"TZOD5BTL w ͭͷΛ࣋ͭ0CTFSWBCMFΛ࡞Δ w 4DIFEVMFSͰ࣮ߦεϨουΛઃఆ͢Δ w ΤϥʔϋϯυϦϯάΛ͢Δ w "TZOD5BTLͱஔ͖͑Δ w
ςετ؆୯ʹॻ͚ΔΑ IUUQTZTZBHJIBUFOBCMPHDPNFOUSZ 5FTU4VCTDSJCFSΛͬͯ3Y+BWBͷTVCTDSJCFͷςετΛॻ͘
w ͯ͢0QFSBUPSͷ࿈݁Ͱ͋Δ -JGU
NBQ Recipe “Recipe” NBQ 3FDJQFΛ4USJOHʹม͢Δɻ ෦ͰԿ͕ى͖͍ͯΔʁ
QVCMJDpOBM30CTFSWBCMF3NBQ 'VOD TVQFS5 FYUFOET3GVOD \ SFUVSOMJGU OFX0QFSBUPS.BQ GVOD
^ NBQ
QVCMJDpOBM30CTFSWBCMF3MJGU pOBM0QFSBUPS FYUFOET3 TVQFS5MJGU \ SFUVSOOFX0CTFSWBCMF OFX0O4VCTDSJCF \ QVCMJDWPJEDBMM
4VCTDSJCFS TVQFS3P \ USZ\ 4VCTDSJCFS TVQFS5TU 4VCTDSJCFS 0CTFSWBCMFIPPLPO-JGU MJGU DBMM P USZ\ TUPO4UBSU 0CTFSWBCMFUIJTPO4VCTDSJCFDBMM TU ^ DBUDI 5ISPXBCMFF \ ུ TUPO&SSPS F ^ ^ DBUDI 5ISPXBCMFF \ ུ PPO&SSPS F ^ ^ ^ ^ MJGU ৽͍͠0CTFSWBCMFʻ3ʼΛ࡞ͬ ͯฦ͍ͯ͠Δɻ0CTFSWBCMF5 ͷߪಡऀͱͯ͠ৼΔ͏
MJGU Recipe “Recipe” MJGU OFX0QFSBUPS.BQ GVOD 4VCTDSJCFS3FDJQFʹݟ͑Δ 0CTFSWBCMF4USJOHʹݟ͑Δ
QVCMJDpOBMDMBTT0QFSBUPS.BQ5 3JNQMFNFOUT0CTFSWBCMF0QFSBUPS3 5\ ུ QVCMJD4VCTDSJCFS TVQFS5DBMM pOBM4VCTDSJCFS TVQFS3P \ SFUVSOOFX4VCTDSJCFS
P \ QVCMJDWPJEPO$PNQMFUFE \ PPO$PNQMFUFE ^ QVCMJDWPJEPO&SSPS 5ISPXBCMFF \ PPO&SSPS F ^ QVCMJDWPJEPO/FYU 5U \ USZ\ PPO/FYU 0QFSBUPS.BQUIJTUSBOTGPSNFSDBMM U ^ DBUDI 5ISPXBCMFF \ &YDFQUJPOTUISPX*G'BUBM F PO&SSPS 0O&SSPS5ISPXBCMFBEE7BMVF"T-BTU$BVTF F U ^ ^ ^ ^ ^ 0QFSBUPS.BQ 'VOD5 3Λద༻ͯ͠ 4VCTDSJCFS3PO/FYU ʹ͠ ͍ͯΔɻ
TVCTDSJCF0O QVCMJDpOBM0CTFSWBCMF5TVCTDSJCF0O 4DIFEVMFSTDIFEVMFS \ JG UIJTJOTUBODFPG4DBMBS4ZODISPOPVT0CTFSWBCMF \ SFUVSO 4DBMBS4ZODISPOPVT0CTFSWBCMF5 UIJT
TDBMBS4DIFEVMF0O TDIFEVMFS ^ SFUVSOOFTU MJGU OFX0QFSBUPS4VCTDSJCF0O5 TDIFEVMFS ^ ͋ʂ
TVCTDSJCF0O OFTU Recipe MJGU OFX0QFSBUPS4VCTDSJCF0O TDIFEVMFS TDIFEVMFS͕ࢦఆͨ͠εϨου ͰTVCTDSJCF ͢Δ Recipe
$VTUPN0QFSBUPS QVCMJDJOUFSGBDF0QFSBUPS3 5 FYUFOET'VOD4VCTDSJCFS TVQFS3 4VCTDSJCFS TVQFS5\ ^ ͨͩͷ'VOD
$VTUPN0QFSBUPS OFX0CTFSWBCMF0QFSBUPS4USJOH *OUFHFS \ !0WFSSJEF QVCMJD4VCTDSJCFS TVQFS*OUFHFSDBMM 4VCTDSJCFS TVQFS4USJOHTVCTDSJCFS \
SFUVSOOFX4VCTDSJCFS*OUFHFS \ !0WFSSJEF QVCMJDWPJEPO$PNQMFUFE \ TVCTDSJCFSPO$PNQMFUFE ^ !0WFSSJEF QVCMJDWPJEPO&SSPS 5ISPXBCMFUISPXBCMF \ TVCTDSJCFSPO&SSPS UISPXBCMF ^ !0WFSSJEF QVCMJDWPJEPO/FYU *OUFHFSJOUFHFS \ TVCTDSJCFSPO/FYU JOUFHFSUP4USJOH ^ ^ ^ ^
4FSJBM0QFSBUPS QVCMJDDMBTT4FSJBM0QFSBUPS3 5JNQMFNFOUT0CTFSWBCMF0QFSBUPS3 5\ "DUJPO4VCTDSJCFS TVQFS3 5UIFO 5OFYU
4FSJBM0QFSBUPS "DUJPO4VCTDSJCFS TVQFS3 5UIFO \ UIJTUIFOUIFO ^ !0WFSSJEF QVCMJD4VCTDSJCFS TVQFS5DBMM pOBM4VCTDSJCFS TVQFS3TVCTDSJCFS \ SFUVSOOFX4VCTDSJCFS5 \ !0WFSSJEF QVCMJDWPJEPO$PNQMFUFE \ UIFODBMM TVCTDSJCFS OFYU ^ !0WFSSJEF QVCMJDWPJEPO&SSPS 5ISPXBCMFUISPXBCMF \ TVCTDSJCFSPO&SSPS UISPXBCMF ^ !0WFSSJEF QVCMJDWPJEPO/FYU 5U \ OFYUU ^ ^ ^ ^
4FSJBM0QFSBUPS BQJVTFS 0CTFSWBCMF6TFS MJGU OFX4FSJBM0QFSBUPS OFX"DUJPO4VCTDSJCFS TVQFS-JTU'FFE 6TFS \
!0WFSSJEF QVCMJDWPJEDBMM 4VCTDSJCFS TVQFS-JTU'FFETVCTDSJCFS 6TFSVTFS \ BQJVTFS'FFE VTFS TVCTDSJCF TVCTDSJCFS ^ ^ TVCTDSJCF OFX"DUJPO-JTU'FFE \ !0WFSSJEF QVCMJDWPJEDBMM -JTU'FFEGFFE-JTU \ EPTPNFUIJOH ^ ^ 0CTFSWBCMF6TFSͷऔಘΛͬ ͯɺVTFS'FFEΛऔΓʹߦ͖ɺ -JTU'FFEΛऔಘ͢Δɻ
NFSHF QVCMJDTUBUJDpOBM50CTFSWBCMF5NFSHF 0CTFSWBCMF FYUFOET0CTFSWBCMF FYUFOET5TPVSDF \ SFUVSOTPVSDFMJGU OFX0QFSBUPS.FSHF
^
NFSHF ࣌ؒ࣠͝ͱϚʔδɻͭ·ΓύϥϨϧ
NFSHFΛͬͨฒྻϦΫΤετ -JTU0CTFSWBCMF#PPMFBOPCTFSWBCMFTOFX"SSBZ-JTU PCTFSWBCMFTBEE SFDJQF 0CTFSWBCMF3FDJQF EP0O/FYU OFX"DUJPO3FDJQF \
!0WFSSJEF QVCMJDWPJEDBMM 3FDJQFSFDJQF \ TVDDFTT ^ ^ JT&NQUZ PCTFSWBCMFTBEE VTFS 0CTFSWBCMF6TFS EP0O/FYU OFX"DUJPO6TFS \ !0WFSSJEF QVCMJDWPJEDBMM 6TFSVTFS \ TVDDFTT ^ ^ JT&NQUZ 0CTFSWBCMF#PPMFBOQBSBMMFM0CTFSWBCMFNFSHF PCTFSWBCMFT
NFSHFΛͬͨฒྻϦΫΤετ QBSBMMFMTVCTDSJCF OFX"DUJPO#PPMFBO \ !0WFSSJEF QVCMJDWPJEDBMM #PPMFBOB#PPMFBO \ શ෦ޭ
^ ^ OFX"DUJPO5ISPXBCMF \ !0WFSSJEF QVCMJDWPJEDBMM 5ISPXBCMFUISPXBCMF \ ͍ͣΕ͔͕ࣦഊ ^ ^ ύϥϨϧʹ"1*ୟ͍ͯͪ߹Θͤͱ͔
w શ෦0QFSBUPSͷ࿈݁ͩɻڪΖ͘͠ෳࡶͳʜ w ιʔεΛಡΉΜͩɻ w ॊೈʹͳΜͰߏஙՄೳͳͷͰઃܭ͕͍͠ w ૬ஊ͍ͨ͠ શ෦0QFSBUPS
w 4VCKFDU0CTFSWFSͰ͋Γ0CTFSWBCMFͰ͋Δ 4VCKFDU
w όΠύεͷΠϝʔδ͔ͳʔʁ 4VCKFDU Recipe “Recipe” 4VCKFDU
w 3Y"OESPJE'SBNFXPSLͷ3Y"DUJWJUZ -JGFDZDMF0CTFSWBCMF w 4VCKFDUΛͬͨ-JTU7JFXͷՃಡΈࠐΈఆ w &WFOU#VT 4VCKFDU
Զͨͪͷઓ͍·ͩ࢝·͔ͬͨΓ
UPCFDPOUJOVFE