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
きりみん
October 28, 2014
Technology
7.4k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
分かった気になるはじめてのRxJava
きりみん
October 28, 2014
More Decks by きりみん
See All by きりみん
AndroidエンジニアがRailsにチャレンジしてる理由
kirimin
1
1.6k
What are AtCoder and competitive programming
kirimin
0
10k
バーチャル男声幼女プログラマーとして活動した1年間の振り返り
kirimin
0
1.2k
アプリエンジニアでも神絵師になりたい!
kirimin
4
5.5k
Watashi ni Kotlin ga maiorita
kirimin
0
610
NEMのAPIとモザイクであそぼう
kirimin
0
420
はじめようきれいなコード
kirimin
8
3.2k
Material Components for Android触ってみる
kirimin
7
2.1k
[社内LT]あたらしいMaterial Design
kirimin
1
1.8k
Other Decks in Technology
See All in Technology
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
170
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
4.7k
kintone の AI コワーカーを、 Anthropic にエージェントを"ホストさせて"作った話 #devkinmeetup
sugimomoto
0
110
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
190
Kaggleで成長するために意識したこと
prgckwb
2
390
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
280
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.3k
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.4k
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
170
Making sense of Google’s agentic dev tools
glaforge
1
250
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
1
3.2k
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.2k
Featured
See All Featured
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
720
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
Ruling the World: When Life Gets Gamed
codingconduct
0
280
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
340
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
Transcript
分かった気になる はじめてのRxJava @kirimin
自己紹介 @kirimin • ふつーのAndroidエンジニア • 仕事ではほぼJavaしか書いたことない • りあくてぃぶ?ナニソレ…というレベル • 人生初LT
1ヶ月くらい前のある日… 某氏「勉強会でLTしてみません?」 僕 「なにそれこわい」 某氏「こわくない」 僕 「ヨ、ヨッシャ!やります!」
とは言ったものの
RxJavaってなんだ…
ググってみた
結果
_人人人人人人人人人_ > よく分からない <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
RxJava??? • 日本語の情報があんまり見つからない • 色々分かってる前提の情報が多くてそもそも概要が 掴めない • なんかとにかく敷居が高そう
これは…
他の人もそう思ってるはず!
というわけで
分かった気になる はじめてのRxJava (※調べてみた)
RxJavaとは(雑) • リアクティブプログラミングを行うためのライブラリである 「Reactive Extensions」のJVM版 • StreamAPI+非同期コールバックみたいなイメージ • イベントを持ったObservableインスタンスに小さな関数をチェーン してゆく事でイベントから返ってくるデータをストリーム的に加工
する処理を定義し、遅延実行・非同期コールバックを行える • Java6以上をサポートしていてScala,Groovy,ClojureなどのJVM言語 やAndroidでも使える
基本的な使い方 1.Observableを生成する 2.Observerを生成する 3.ObservableにObserver渡して実行する
Observable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() { @Override public void
call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello"); subscriber.onNext("world!"); subscriber.onCompleted(); } } ); 1.Observableを生成する Observableはイベントを定義したインスタンスとして存在し、 イベントの結果を伝える役目を持ちます。 この例ではHelloとWorldの2つの文字列を結果として伝えるイベント を定義しています。
Observer<String> myObserver = new Observer<String>() { @Override public void onNext(String
s) { System.out.println(s); } @Override public void onCompleted() {} @Override public void onError(Throwable e) {} }; 2.Observerを生成する ObserverはObservableからの結果を受ける側です。 この例では結果をそのままprint出力させています。
myObservable.subscribe(myObserver); 3.ObservableにObserverを渡して実行する 最後にObservableのsubscribeメソッドにObserverを渡して イベントを実行します。 この時点で初めてObservableが実行され、 onNextに渡した結果が順番にObserverに伝わります。 そして >”Hello” >”world!” と出力されます。
Observable<String> myObservable = Observable.from(new String[]{"Hello", "world!"}); myObservable.subscribe(new Action1<String>() { @Override
public void call(String s) { System.out.println(s); } }); もっと簡潔に書く fromは受け取った配列やIteratorの要素を順番に結果として伝える Observableを生成してくれます。 また、subscribeにはObserverの代わりに関数(Action1インターフェイスの 実装)を一つだけ渡す事で、onNext時に関数を実行してくれます。
Observable.from(new String[]{"Hello", "world!"}).subscribe(System.out::println); ここまでJava8なら1行
Observableを加工する • map • flatMap • filter
Observableを加工する • map • flatMap • filter
map Observableの要素それぞれに対し関数を適用する事で 別のObservableに変換します。
Observable.from(new String[]{"Hello", "world!"}) .map(String::length) .subscribe(System.out::println); map 文字列の代わりにInteger型の結果が渡され >5 >6 が順番に出力されます。
実際のコード例です。 subscribeの前にmapを挟み文字列を文字列長の数値に変換しています。
Observableを加工する • map • flatMap • filter
flatMap Observableの各要素から別のObservableを作り 一つのObservableに変換します。
Observable.from(new String[]{"Hello", "world!"}) .flatMap(s -> Observable.from(s.split(""))) .subscribe(System.out::println); flatMap Helloworld!が一文字ずつ出力されます。 実際のコード例です。
各要素の文字列を一文字ずつに分割したObservableを作り フラット化しています。
Observableを加工する • Map • flatMap • filter
filter Observableの要素から条件に合うものだけを抽出します。
Observable.from(new String[]{"Hello", "world!"}) .flatMap(s -> Observable.from(s.split(""))) .filter(s -> !s.equals("l")) .subscribe(System.out::println);
filter 実際のコード例です。 先程の例にfilterを挟み要素から”l”を取り除いています。 "l”以外が一文字ずつ出力されます。
Observable.from(new String[]{"Hello", "world!"}) .subscribeOn(Schedulers.newThread()) .flatMap(s -> Observable.from(s.split(""))) .filter(s -> !s.equals("l"))
.subscribe(System.out::println); 別スレッドで実行する 処理を別スレッドで実行したければsubscribeOnを呼ぶだけでOK。 簡単に非同期処理へ切り替えられます。
And more... RxJavaのGitHubWikiページを見れば他にも大量にある便利メソッドと その詳しい説明が載っています。 https://github.com/ReactiveX/RxJava/wiki
まとめ • 非常に多機能で奥は深そう • しかし使い始める敷居は意外と高くないのでは • ただしラムダが無いとかなり辛いコードに… (Java8未満で使うならGroovy,Retrolambda等が必須?)
なんとなく 分かった気になれましたか?
ご清聴ありがとうございました!