Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
Search
RyotaMurohoshi
October 28, 2014
Technology
0
19
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
2014/10/28にpixivさんで行われたRxJavaNightの@RyotaMurohoshiの資料です。
※元々はSlideShareで公開していた資料です
RyotaMurohoshi
October 28, 2014
Tweet
Share
More Decks by RyotaMurohoshi
See All by RyotaMurohoshi
Tilemapのアップデートについて
ryotamurohoshi
0
65
Unityの合同同人誌や合同商業誌を書いてる僕は感想やレビューや評価が欲しい
ryotamurohoshi
0
570
Unity 2021.1での Unityパッケージの名称変更について
ryotamurohoshi
0
790
Odin Validationはいいぞ!
ryotamurohoshi
2
1k
Tilemapはいいぞ!2020 〜すごいぞ、プロジェクト専用拡張Brush〜
ryotamurohoshi
0
2.4k
Unityでも、新しいC#
ryotamurohoshi
0
1.4k
Riderはいいぞ!
ryotamurohoshi
1
3.7k
Riderのススメ〜俺はRiderここが好き〜
ryotamurohoshi
1
2.6k
Unity開発者に伝えたい.NETのこと
ryotamurohoshi
4
38k
Other Decks in Technology
See All in Technology
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
1.4k
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
220
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
150
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
430
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
2.1k
AIエージェントに必要なのはデータではなく文脈だった/ai-agent-context-graph-mybest
jonnojun
1
250
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Agile that works and the tools we love
rasmusluckow
331
21k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
430
The untapped power of vector embeddings
frankvandijk
1
1.6k
Crafting Experiences
bethany
1
55
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
Site-Speed That Sticks
csswizardry
13
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
160
Transcript
@RyotaMurohoshi 2014/10/28'RxJava'Night
೦ͳ͕Βɺॳ৺ऀͰ͢ ͝ΊΜͳ͍͞
ಥવͰ͕࣭͢Ͱ͢ʂ
RxJavaͳͲΛ͏͢Ͱʹ ΨοπϦ͍ͬͯΔํʁ
RxJavaɺHello*world ͨ͠Αͬͯํʁ
RxJavaΑ͘Θ͔Βͳ͍͚Ͳ ڵຯ͋ΔΑͬͯํʁ
ϓϩάϥϛϯάݴޠGroovy ͍ͬͯΔ!or!͍ͬͯΔํʁ
C#erͳํɺC#͔Δํʁ
Unity͍ͬͯΔํʁ
͋Γ͕ͱ͏͍͟͝·ͨ͠
͓લͩΕΑ • ໊લ":"྄ࣨଠ • ࣄ":"UnityήʔϜ։ൃ(C#)ɺʲલʳAndroidΞϓϦ։ൃ(Java) • Twi6er":"@RyotaMurohoshi • ߘઌ":"h6p:/ /qiita.com/RyotaMurohoshi
• ڵຯ":"UnityɺC#ɺGroovy
ʲॳ৺ऀ͕ͬͯΈͨʳ RxɺνϟϨϯδͯ͠Έͨ ͱ͍͏ςʔϚͰɺ಄ͷ࣭ʹؔͷ͋Δ༰Ͱ͓ૹΓ͠·͢ɻ
ձ͕ʮRx͍͢͝ਓͨͪʯ͔ΓͩͬͨΒ ΨνযΓ͍ͯ͠·͢ ੜஆ͔͍Ͱݟ͍ͯ͋͛ͯͩ͘͞
Έͳ͞ΜRxJavaΛΓ·ͨ͠ɻ ͬͯΈ͍ͨͰ͢Ͷɻ ·ͣɺͲ͜Λݟ·͔͢ʁ
RxJavaͷwiki h"ps:/ /github.com/Reac3veX/RxJava/wiki
RxJavaͷWiki)filterϝιουͷઆ໌ΑΓ h0ps:/ /github.com/Reac<veX/RxJava/wiki/FilteringAObservables) numbers = Observable.from([1, 2, 3, 4, 5,
6, 7, 8, 9]); numbers.filter({ 0 == (it % 2) }).subscribe( { println(it); }, // onNext { println("Error: " + it.getMessage()); }, // onError { println("Sequence complete"); } // onCompleted );
Μʁ
ͳΜͩ͜Εʁ • [1,%2,%3,%4,%5,%6,%7,%8,%9] • {%0%==%(it%%%2)%} • it • println%("Sequence%Complete")
Groovy
ʲΑ͍ͱ͓ͬͨɺίϨศརʂʳ RxJava͏ͳΒɺGroovy͋Γʂ
RxJavaͷwikiͷαϯϓϧίʔυɺ ݁ߏGroovyͰॻ͔Ε͍ͯΔ
Groovy • JVMݴޠ • Javaͱͷੑ͕ߴ͍ • ؆ܿͳهड़ॊೈͳॲཧ͕Ͱ͖Δ • Groovy2.4͔ΒAndroidʹରԠ(ࠓbeta63)
RxJavaɺΠϯλʔϑΣʔεΛҾʹͱΔϝιου͔ΓͰ͢Ͷ .map(new Func1<OnClickEvent, Integer>() { @Override public Integer call(OnClickEvent clickEvent)
{ return 1; } }) ແବʹ͍ɽɽɽ
ແବʹ͍ͷݏͩʂ • Java8ͳΒϥϜμࣜ • Java8ΑΓલͰretrolambda
ແବʹ͍ͷݏͩʂ • Java8ͳΒϥϜμࣜ • Java8ΑΓલͰretrolambda • Groovy͋Γʂ
Androidͩͱɺ
RxAndroidͱRxJavaɺBu.onΫϦοΫճΛTextViewʹදࣔ ViewObservable.clicks(findViewById(R.id.button)) .map(new Func1<OnClickEvent, Integer>() { @Override public Integer call(OnClickEvent
clickEvent) { return 1; } }) .scan(new Func2<Integer, Integer, Integer>() { @Override public Integer call(Integer acc, Integer current) { return acc + current; } }) .subscribe(new Action1<Integer>() { @Override public void call(Integer clickCount) { TextView textView = (TextView)findViewById(R.id.text_view); textView.setText(clickCount.toString()); } });
͍ʂ
RxAndroidͱRxJavaͱGroovyɺBu0onΫϦοΫճΛTextViewʹදࣔ ViewObservable.clicks(findViewById(R.id.button)) .map { 1 } .scan { acc, current
-> acc + current } .subscribe { findViewById(R.id.text_view).setText(it.toString()) }
͖ͬ͢Γʂ
GroovyͷΫϩʔδϟͰɺͱ͖ͬͯͬ͢Γʂ RxAndroid+Groovyͷྫ-h/p:/ /qiita.com/RyotaMurohoshi/items/48bbbecea49591fd20a2 Ϋϩʔδϟͷॻ͖ํ͍Ζ͍Ζ!h#p:/ /qiita.com/RyotaMurohoshi/items/2a30a74c0074e11d0207
RxGroovy • RxJavaͷΠϯλʔϑΣʔεΛҾʹͱΔϝιουͰɺGroovyͷ ΫϩʔδϟΛͤΔΑ͏ʹ͢Δͷ • Groovy2.2Ҏ্ͳΒΫϩʔδϟͷ҉తͳڧ੍ܕมʹΑΓɺ RxGroovyͳ͠ͰΫϩʔδϟΛͤΔ • AndroidͰGroovy2.4Ҏ্͏ͳΒɺRxGroovyແͯ͘OK h"p:/
/qiita.com/RyotaMurohoshi/items/3f1f3cde0e5c6785b2f1
GroovyͰɺRxJava͜Μͳ͍هड़Ͱ࢝ΊΒΕΔ @Grab(group='com.netflix.rxjava', module='rxjava-core', version='0.20.4') import rx.Observable import rx.functions.Action1 Observable.from("Taro", "Jiro",
"Saburo").subscribe { println "Hello $it"}
RxJavaʹݶΒͣɺJavaͷϥΠϒϥϦΛνϣϩͬͱࢼ࣌͢ Groovyศརͩͱࢥ͍·͢ʂ • Ϋϥεͱ͔mainϝιουͳ͠Ͱ͍͖ͳΓॻ͚Δ(εΫϦϓτ) • GrapeʹΑΓɺΞϊςʔγϣϯҰൃͰϥΠϒϥϦ͑Δ • GroovyShellͰରతʹࢼͤΔ h"p:/ /qiita.com/RyotaMurohoshi/items/99475255e56f8fae712b
ʲΑ͍ͱ͓ͬͨɺίϨศརʂʳ RxJava͏ͳΒɺGroovy͋Γʂ Ͱͨ͠ʂ
ͯ͞ɺRxJava͍͜ͳͤΔΑ͏ʹͳΓ͍ͨͰ͢ΑͶʁ Ͳ͏͠·͠ΐ͏ʁ
RxJava&is&a&Java&VM&implementa1on& of&Reac1ve&Extensions:&a&library&for& composing&asynchronous&and&event> based&programs&by&using&observable& sequences. —"RxJavaͷwiki"HomeΑΓ(h1ps://github.com/Reac<veX/RxJava/wiki)
Reac%ve'Extensions
RxJavaReac(ve)Extensions(C#ͷϥΠϒϥϦ)Λجʹ͍ͯ͠Δ RxJavaΛ͍͜ͳ͍ͨ͠ͳΒ Reac%ve'ExtensionsͷهࣄɾߘͳͲͷใཱͭʂ
ʲ͜ͷใ͕ૉఢʂͱ͔ͬͯΓ͍͢ʂʳ Reac%ve'ExtensionsͷࢿྉͰRxͷษڧΛ͠ɺ RxJavaΛ͍͜ͳ͢
ͪΖΜJavaͱC#ͷҧ͍͋Γ·͢ ϝιου໊͕ҧ͏ͭ͋Γ·͢(WhereͱfilterɺSelectͱmap)
ͦΕͰRxͷߟ͑ํΛ ཧղ͢Δͷʹɺ ͱ͍͍ͬͯͱࢥ͍·͢ʂ
ϓϩάϥϛϯάC#ୈ7൛ 11ষؙʑRx(Reac(ve*Extensions) ͝ΊΜͳ͍͞ɺ࠷ॳʹ͜ΕಡΉͷͪΐͬͱͭΒ͔ͬͨͰ͢
Reac%ve'Extensions(C#ͷϥΠϒϥϦ)ͷ ૉఢͳϒϩάɾهࣄΛߘ͞Ε͍ͯΔํୡ͕͍·͢ ͦͷํୡͷϒϩάͱ͔ͯΓ͔ͬͨ͢Ͱ͢
xin9le͞Μ Rxೖ h"p:/ /xin9le.net/rx/intro
xin9le͞ΜͷRxೖ RxͷೖɻϓϩάϥϛϯάC#%ୈ7൛ΛಡΉલʹɺͪ͜ΒΛઌʹಡΈ͔ͨͬͨɻ ॳΊʹͪ͜ΒΛಡΉͷ͕ͱ͍͍ͯͱࢥ͍·͢ʂ ଞʹεϥΠυͨ͘͞Μެ։͞Ε͍ͯ·͢ʂ
okazuki͞Μ Reac%ve'Extensions'࠶ೖ h"p:/ /okazuki.hatenablog.com/archive/category/Reac9ve%20Extensions
okazuki͞ΜͷReac*ve,Extensions࠶ೖ Reac%ve'ExtensionsͷϝιουΛ࣮ࡍʹಈ͔ͨ͠αϯϓϧίʔυ͕ͨ͘͞Μ ϦϑΝϨϯεͷઆ໌จΛݟͯϝιουͷΠϝʔδ͕༙͖·ͤΜͰ͕ͨ͠ɺ ࣮ࡍͷίʔυͱ࣮ߦ݁ՌͰΠϝʔδ͕༙͖·ͨ͠ʂ
neuecc͞Μ ࿈ࡌɿReac%ve'ExtensionsʢRxʣೖ h"p:/ /www.atmarkit.co.jp/fdotnet/introrx/index/ UniRxʹ͍ͭͯ h"p:/ /neue.cc/2014/08/23_476.html7ͳͲ
neuecc͞Μ ͔ͳΓૣ͍ஈ֊͔ΒReac%ve'Extensionsʹ͞Ε͍ͯͯ·͢ ϒϩάɺεϥΠυ͚ͩͰͳ͘@IT͞ΜͰ࿈ࡌ͞Ε͍ͯ·͢ UnityͰ͑ΔReac*ve,ExtensionsҠ২ͷUniRxͷ࡞ऀ͞ΜͰ͢ ࠓొஃ͞Ε͍ͯ·͢
ʲ͜ͷใ͕ૉఢʂͱ͔ͬͯΓ͍͢ʂʳ Reac%ve'ExtensionsͷࢿྉͰRxͷษڧΛ͠ɺ RxJavaΛ͍͜ͳ͢ Ͱͨ͠ʂ
γϯϓϧͳྫͰ͕͢ɺ ·ͣखΛಈ͔ͯ͠Έ·ͨ͠ʂ ࠓޙͬͯΈͯɺߘ͍ͯ͜͠͏ͱࢥ͍·͢ ؒҧ͍ͬͯͨΒɺ༏͘͠·͔͞Γ͍͚͛ͯͨͩΔͱ͏Ε͍͠Ͱ͢ RxAndroid+Groovy-:ɹh0p:/ /qiita.com/RyotaMurohoshi/items/48bbbecea49591fd20a2 UnityͰUniRxΛͬͯ(:(h+p:/ /qiita.com/RyotaMurohoshi/items/7e1509e03d8e3a1eae4f
ল ཧతͳجૅͷษڧΛޙճ͠ʹ͗ͯ͢͠͠·ͬͨɻ
FRPRxʹ͍ͭͯ ·ͬͨ͘;Εͣਃ͠༁ͳ͍Ͱ͢ʂ
ʲॳ৺ऀ͚ͩΕͲʳ RxɺGroovyͰࢼ͢ͷ͋Γͩͱࢥ͏͠ɺ Reac%ve'Extensinsͷࢿྉ ͱͬͯࢀߟʹͳΔͱࢥ͏ɻ Ͱͨ͠ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ @RyotaMurohoshi h"p:/ /qiita.com/RyotaMurohoshi