SlideShare a Scribd company logo
ReactiveCocoaを
かじってみた
#iOS_LT
!

田村 孝文
ReactiveCocoaって何?
•

「リアクティブプログラミング」のObjective-C実装の一つ
•

•

https://github.com/ReactiveCocoa/ReactiveCocoa

リアクティブプログラミングって何?
「なぜリアクティブプログラミングは重要か。」http://d.hatena.ne.jp/pokarim/20101226 から引用:

•

『 リアクティブプログラミングは、「時間とともに変化する値」
=「振る舞い」同士の関係性を記述することでプログラミングを
行うパラダイムです。

GUIなどのようにインタラクティブなシステムや、シミュレーションやアニメーションの
ようにダイナミックに状態が変化するようなシステムを宣言的に記述することができます

これらの「変化する状態」や「外部とのやりとり」が支配的なシステムは、純粋関数型言語が、その強みを
発揮しにくい部分でもあります。

うんたらかんたら∼∼∼ほにゃほにゃ∼∼∼』

・・・うん、なるほど。よく分からん!
というわけで
•

よく分かってないけどしゃべります。

•

今日話をする順番
•

パラダイムとしての「リアクティブプログラミング」の話(超ざっ
くり)

•

ライブラリとしての「ReactiveCocoa」を実際に使ってみた話
•

Target/Action方式とReactiveCocoa方式を見比べる

•

ReactiveCocoaでしか出来ない(であろう)方式
リアクティブプログラミングを
絵を見て分かった気になる
関数として定義
↓

「値と値の関係性」を関数として記述するプログ
ラミングスタイル、っぽい、みたいな?感じ?
引用 http://d.hatena.ne.jp/pokarim/20101226
リアクティブプログラミングを
仮想言語で分かった気になる

a=1
b=a*3
a=2
print(b) ←ここで何が出てくる?
• 命令型なら
• bは3のまま ← a*3が計算された時のまま
• リアクティブプログラミングでは
• bが6になってる ←「bはaの3倍」という関係性を定
義しているので、bの値はaの値が変更されたら自動
で再計算され、自動で再代入されている(?)
•

Excelのセルに書いたマクロのような感じ
ReactiveCocoaを使ってみる:
作ってみるアプリ
ユーザ作成画面を想定	




	createボタンは以下の条件を満たしたら有効

•

になる(ルール1)

	

◦	 username,emailが空でない


	

◦	 passwordとpasswordVerificationが同
じ


	

◦	 passwordは8文字以上


	 •	 passwordとpasswordVerificationが違う場
合とpasswordが8文字以下の場合は、
Labelに警告が表示される(ルール2)


!

→TextFieldの状態が変わったら、メッ
セージとボタンの状態が変わる。
ReactiveCocoaを使ってみる:
Target/Action方式(1)

•

見慣れた構成

•

ルールは、ViewControllerのメソッドとして持つ
ReactiveCocoaを使ってみる:
Target/Action方式(2)

https://github.com/taktamur/RACSample/blob/master/RACSample/TargetActionViewController.m
ReactiveCocoaを使ってみる:
ReactiveCocoa方式(1)

•
•

構成としてはほぼ同じ
ルールは、RACSignalオブジェクトが持つ
• RAC =ReactiveCocoa のprefix
ルールはblockで記述
ルールの記述にUIヘの参照が無い
•

•
ReactiveCocoaを使ってみる:
ReactiveCocoa方式(2)

UIのバインド

ルールの実装

結果をバインド

https://github.com/taktamur/RACSample/blob/master/RACSample/RACStyleViewController.m
ReactiveCocoaを使ってみる:
ここまでの実装で気になる点
•

ルール1とルール2に、重複する部分がある
•

createボタンは以下の条件を満たしたら有効になる(ルール1)

•
•

passwordとpasswordVerificationが同じ


•
•

username,emailが空でない

passwordは8文字以上


passwordとpasswordVerificationが違う場合とpasswordが8文字以下の場合
は、Labelに警告が表示される(ルール2)


•

このルールの分離はTarget/Action方式ではやりにく
いけど、ReactiveCocoaなら可能!

•

→RACSignalの連鎖が可能
ReactiveCocoaを使ってみる:
RACSignalの連鎖(1)

https://github.com/taktamur/RACSample/blob/master/RACSample/RACStyleViewController2.m
ReactiveCocoaを使ってみる:
RACSignalの連鎖(2)
別で作ったSignalを
元データとして
バインドしている

Signalが連鎖するような書き方は
標準では出来ない(ですよね?)
https://github.com/taktamur/RACSample/blob/master/RACSample/RACStyleViewController2.m
まとめ
•

パラダイムとしての「リアクティブプログライング」は魅力的
•

•

テンポラリ的な「変数(状態)」が不要なので、矛盾が発生しにくい。再計
算は言語やランタイム、ライブラリが自動で行う。関数型言語っぽい。

ライブラリとしての「ReactiveCocoa」は難物←今時点での田村評価
•

•

•

利点:ビジネスロジックをSignalとして分離出来る。またSignalの連鎖を
使って、ビジネスロジックを「単純なルールの組み合わせ」に分解出来る。
UIとロジックの分離が可能。
欠点:難解。Objective-Cと馴染んでいない。ライブラリが超ヘビー級。

同じアイデアを、もっとObjetive-Cに馴染んだ形で、ライトに実装さ
れたものがあればそれが欲しい。←無ければつk(ry
ご清聴
ありがとうございました。
•

このLTの原稿

http://qiita.com/paming/items/9ac189ab0fe5b25fe722

More Related Content

Similar to Reactive cocoaをかじってみた。

20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
Tomoyuki Obi
 
WPF/Silverlight視点で視る MetroスタイルのXAML
WPF/Silverlight視点で視るMetroスタイルのXAMLWPF/Silverlight視点で視るMetroスタイルのXAML
WPF/Silverlight視点で視る MetroスタイルのXAML
Yuya Yamaki
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
Ken Morishita
 
オブジェクト指向最強
オブジェクト指向最強オブジェクト指向最強
オブジェクト指向最強haganemetal
 
業務システムにおけるインタラクションとアニメーション
業務システムにおけるインタラクションとアニメーション業務システムにおけるインタラクションとアニメーション
業務システムにおけるインタラクションとアニメーション
Fixel Inc.
 
EXE #3: AIを協力して作成するDapp
EXE #3: AIを協力して作成するDappEXE #3: AIを協力して作成するDapp
EXE #3: AIを協力して作成するDapp
blockchainexe
 
関数型っぽくROSロボットプログラミング
関数型っぽくROSロボットプログラミング関数型っぽくROSロボットプログラミング
関数型っぽくROSロボットプログラミング
Hideki Takase
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考えるオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
Tomoharu ASAMI
 

Similar to Reactive cocoaをかじってみた。 (8)

20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
 
WPF/Silverlight視点で視る MetroスタイルのXAML
WPF/Silverlight視点で視るMetroスタイルのXAMLWPF/Silverlight視点で視るMetroスタイルのXAML
WPF/Silverlight視点で視る MetroスタイルのXAML
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
オブジェクト指向最強
オブジェクト指向最強オブジェクト指向最強
オブジェクト指向最強
 
業務システムにおけるインタラクションとアニメーション
業務システムにおけるインタラクションとアニメーション業務システムにおけるインタラクションとアニメーション
業務システムにおけるインタラクションとアニメーション
 
EXE #3: AIを協力して作成するDapp
EXE #3: AIを協力して作成するDappEXE #3: AIを協力して作成するDapp
EXE #3: AIを協力して作成するDapp
 
関数型っぽくROSロボットプログラミング
関数型っぽくROSロボットプログラミング関数型っぽくROSロボットプログラミング
関数型っぽくROSロボットプログラミング
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考えるオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
 

Recently uploaded

【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 

Recently uploaded (15)

【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 

Reactive cocoaをかじってみた。