SlideShare a Scribd company logo
1 of 27
Download to read offline
FRP
Functional Reactive Programming
2014/08/01
Ryo Kamimura
いいか、みんな
         (゚д゚ )
         (| y |)
  関数型プログラミングの要素をリアクティブプログラミングに合わせると
    関数型 (゚д゚) リアクティブ
      \/| y |\/
      FRPになるのだ
         ( ゚д゚) FRP
         (\/\/
(reactive)
( )
( ) (behavior)
(stateless)
(immutable)
(map, filter, fold)
Java Objective-C
FRP
RxJava
compile 'com.netflix.rxjava:rxjava-core:+'
ReactiveCocoa
pod 'ReactiveCocoa'
Push Pull
Push
Pull
( )
Pull
java.lang.Iterable, RACSequence(ReactiveCocoa)
Push
rx.Observable(RxJava), RACSignal(ReactiveCocoa)
Push
Push
UI
3
next
completed
error
(Java)
ViewObservable.input(mEditText, false)
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.d("LOG", "New value: " + s);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable t) {
Log.d("LOG", "Error: " + t.getMessage());
}
}, new Action0() {
Override
public void call() {
Log.d("LOG", "Completed.");
}
});
(Objective-C)
[self.textField.rac_textSignal subscribeNext:^(id x){
NSLog(@"New value: %@", x);
} error:^(NSError *error){
NSLog(@"Error: %@", error);
} completed:^{
NSLog(@"Completed.");
}];
FRP
KVO
UI
Transformation
Filtering
Combining
Injection
Transformation
map() / map:
flatMap() / flattenMap:
Filtering
filter() / filter:
skip() / skip:
throttleWithTimeout() / throttle:
Combining
merge() / merge:
zip() / zip:reduce:
Injection
doOnEach() / doNext:
doOnCompleted() / doCompleted:
doOnError() / doError:
FRP
1.
2.
3. 500
4.
5.
Java 8
ViewObservable.input(mEditText, false)
.filter(text -> {
// 入力値をチェックして
return isValidText(text);
})
.throttleWithTimeout(500, TimeUnit.MILLISECONDS) // 500ミリ秒以内
.flatMap(text -> {
// 入力値をサーバーに送信
return sendTextObservable(text);
})
.flatMap(jsonResponse -> {
// レスポンスの値を使って再度サーバーからデータ取得
return resultObservable(jsonResponse.get("result"));
})
.observeOn(AndroidSchedulers.mainThread()) // UIスレッドで
.subscribe(jsonResponse -> {
// UIを更新
}, throwable -> {
Log.d("LOG", "An error occurred: " + throwable.getMessage());
});
Objective-C
[[[[[[[self.textField rac_textSignal]
filter:^BOOL(NSString *text) {
// 入力値をチェックして
@strongify(self)
return [self isValidText:text];
}]
throttle:0.5] // 500ミリ秒以内
flattenMap:^RACStream*(NSString *text) {
// 入力値をサーバーに送信
@strongify(self)
return [self signalForSendText:text];
}]
flattenMap:^RACStream*(NSDictionary *jsonResponse) {
// レスポンスの値を使って再度サーバーからデータ取得
@strongify(self)
return [self signalForResult:jsonResponse[@"result"]]
}]
deliverOn:[RACScheduler mainThreadScheduler]] // UIスレッドで
subscribeNext:^(NSDictionary *jsonRespoonse) {
// UIを更新
} error:^(NSError *error) {
NSLog(@"An error occurred: %@", error);
}];
FRP
GUI
UI
Push
GUI
ON/OFF
(Spinner/UIPickerView)
Non-FRP
UI
FRP
iOS Android
Java Java8 (+ Retrolambda)
Objective-C
Groovy Swift
THE END

More Related Content

Viewers also liked

Video games, literacy, and identity
Video games, literacy, and identityVideo games, literacy, and identity
Video games, literacy, and identityNicky Rosi
 
Nisqually National Wildlife Refuge - Habitat types
Nisqually National Wildlife Refuge - Habitat typesNisqually National Wildlife Refuge - Habitat types
Nisqually National Wildlife Refuge - Habitat typesSheila Wilson
 
Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13
Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13
Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13lena lena
 
NREP Ohop Tree Planting -Fall 2013
NREP Ohop Tree Planting -Fall 2013NREP Ohop Tree Planting -Fall 2013
NREP Ohop Tree Planting -Fall 2013Sheila Wilson
 
Tips On Dating A Girl
Tips On Dating A GirlTips On Dating A Girl
Tips On Dating A Girlwilbourntext
 
Ekologi yang terdera dari danau semi alami
Ekologi yang terdera dari danau semi alamiEkologi yang terdera dari danau semi alami
Ekologi yang terdera dari danau semi alamiDevy Ratnasari
 
Updated version of media presentation 2
Updated version of media presentation 2Updated version of media presentation 2
Updated version of media presentation 2shipy02
 
Intro biomimicry talk- edu
Intro biomimicry talk- eduIntro biomimicry talk- edu
Intro biomimicry talk- eduSheila Wilson
 
Hardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with itHardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with itAlexander Roche
 

Viewers also liked (15)

Mussel Magic
Mussel MagicMussel Magic
Mussel Magic
 
Video games, literacy, and identity
Video games, literacy, and identityVideo games, literacy, and identity
Video games, literacy, and identity
 
The thin green line
The thin green lineThe thin green line
The thin green line
 
Nisqually National Wildlife Refuge - Habitat types
Nisqually National Wildlife Refuge - Habitat typesNisqually National Wildlife Refuge - Habitat types
Nisqually National Wildlife Refuge - Habitat types
 
Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13
Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13
Баян-Өлгий аймгийн Өлгий сумын 1дүгээр бүрэн дунд сургууль 2015.10.13
 
NREP Ohop Tree Planting -Fall 2013
NREP Ohop Tree Planting -Fall 2013NREP Ohop Tree Planting -Fall 2013
NREP Ohop Tree Planting -Fall 2013
 
ELS SECRETS DE L'AIGUA
ELS SECRETS DE L'AIGUAELS SECRETS DE L'AIGUA
ELS SECRETS DE L'AIGUA
 
Tips On Dating A Girl
Tips On Dating A GirlTips On Dating A Girl
Tips On Dating A Girl
 
Ekologi yang terdera dari danau semi alami
Ekologi yang terdera dari danau semi alamiEkologi yang terdera dari danau semi alami
Ekologi yang terdera dari danau semi alami
 
Updated version of media presentation 2
Updated version of media presentation 2Updated version of media presentation 2
Updated version of media presentation 2
 
Eye on nature 2014
Eye on nature 2014Eye on nature 2014
Eye on nature 2014
 
Els ordinadors de les classes
Els ordinadors de les classesEls ordinadors de les classes
Els ordinadors de les classes
 
Padrins i fillols de 5èA i 1rA
Padrins i fillols de 5èA i 1rAPadrins i fillols de 5èA i 1rA
Padrins i fillols de 5èA i 1rA
 
Intro biomimicry talk- edu
Intro biomimicry talk- eduIntro biomimicry talk- edu
Intro biomimicry talk- edu
 
Hardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with itHardware hacking on the pi; what's js got to do with it
Hardware hacking on the pi; what's js got to do with it
 

Similar to FRP - Functional Reactive Programming

Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用nmaro
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.SmartNews, Inc.
 
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月Takashi Someda
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Yuji Kubota
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...Rescale Japan株式会社
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
Rx swift,Repro framewolrk
Rx swift,Repro framewolrkRx swift,Repro framewolrk
Rx swift,Repro framewolrkDaisuke Nagata
 
Sansan様 登壇資料
Sansan様 登壇資料Sansan様 登壇資料
Sansan様 登壇資料Daisuke Nagata
 
React Redux Storybook Swagger でフロント爆速開発
React Redux Storybook Swagger でフロント爆速開発React Redux Storybook Swagger でフロント爆速開発
React Redux Storybook Swagger でフロント爆速開発ShotaOd
 
Reactを使ったVR環境
Reactを使ったVR環境Reactを使ったVR環境
Reactを使ったVR環境KatsuyaENDOH
 

Similar to FRP - Functional Reactive Programming (18)

Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
 
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
GraphQL with React
GraphQL with ReactGraphQL with React
GraphQL with React
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
Rx swift,Repro framewolrk
Rx swift,Repro framewolrkRx swift,Repro framewolrk
Rx swift,Repro framewolrk
 
Sansan様 登壇資料
Sansan様 登壇資料Sansan様 登壇資料
Sansan様 登壇資料
 
React Redux Storybook Swagger でフロント爆速開発
React Redux Storybook Swagger でフロント爆速開発React Redux Storybook Swagger でフロント爆速開発
React Redux Storybook Swagger でフロント爆速開発
 
Reactを使ったVR環境
Reactを使ったVR環境Reactを使ったVR環境
Reactを使ったVR環境
 

Recently uploaded

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (8)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

FRP - Functional Reactive Programming