Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
Kazuhiro Sakamoto
PDF, PPTX
4,778 views
Applicative Functors in Swift
shibuya.swift #2 での発表資料です。
Engineering
◦
Read more
10
Save
Share
Embed
Save to Drive
Download now
Download as PDF, PPTX
1
/ 44
2
/ 44
3
/ 44
4
/ 44
5
/ 44
6
/ 44
7
/ 44
8
/ 44
9
/ 44
10
/ 44
11
/ 44
12
/ 44
13
/ 44
14
/ 44
15
/ 44
16
/ 44
17
/ 44
18
/ 44
19
/ 44
20
/ 44
More Related Content
PPTX
[Dots.]taiga
by
Tatsunori Nishikori
37 slides
7.7K views
PDF
Sqlite
by
Yohei Sakakibara
16 slides
1.7K views
PPTX
リキッドレイアウトって何なのよ
by
Miho Matsui
18 slides
348 views
PPTX
はじめてのブログ論 Ver臼杵
by
Shoji Endo
102 slides
549 views
PDF
情報システム部がSplunk を使うとどうなるか?
by
snicker_jp
45 slides
22.6K views
PDF
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
by
snicker_jp
34 slides
9.4K views
PDF
これからSpringを使う開発者が知っておくべきこと
by
土岐 孝平
32 slides
27.3K views
PPTX
SendGrid Parse APIをデモってみる
by
Wataru Sato
11 slides
3.8K views
[Dots.]taiga
by
Tatsunori Nishikori
37 slides
7.7K views
Sqlite
by
Yohei Sakakibara
16 slides
1.7K views
リキッドレイアウトって何なのよ
by
Miho Matsui
18 slides
348 views
はじめてのブログ論 Ver臼杵
by
Shoji Endo
102 slides
549 views
情報システム部がSplunk を使うとどうなるか?
by
snicker_jp
45 slides
22.6K views
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
by
snicker_jp
34 slides
9.4K views
これからSpringを使う開発者が知っておくべきこと
by
土岐 孝平
32 slides
27.3K views
SendGrid Parse APIをデモってみる
by
Wataru Sato
11 slides
3.8K views
Viewers also liked
PDF
Swift API Design Guidelines (dec 3, 2015)
by
Goichi Hirakawa
31 slides
4.3K views
PDF
プログラミング初心者の壁の越え方
by
Yuichi Kato
30 slides
6.5K views
PDF
SwiftにおけるClassとStructの使い分け
by
Kazunobu Tasaka
18 slides
3.3K views
PDF
Swift3.0に向けて enumerateを使い始めよう
by
Motoki Narita
33 slides
8.3K views
PDF
iOS開発 本当にあった怖い話
by
Kazuhiro Sakamoto
55 slides
3.5K views
PDF
誰でも出来るローカル開発環境の作り方
by
666oh666
29 slides
9.5K views
PDF
Eight meets Realm
by
Kazuhiro Sakamoto
28 slides
2.8K views
PPTX
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
by
Roy Kim
71 slides
6K views
PDF
エンジニアのためのブログ勉強会(公開用)
by
Kenji Tanaka
47 slides
1.9K views
PDF
サーバサイドエンジニアが 1年間まじめにSPAやってみた
by
Itaru Kitagawa
50 slides
17.2K views
PPTX
実践 Redux Saga -Practical Redux Saga-
by
Shinichiro Yoshida
151 slides
10.4K views
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
91 slides
49.3K views
PDF
20170302 tryswift tasting_tests
by
Kazuaki Matsuo
57 slides
8.2K views
PDF
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
by
小林 信行
50 slides
22.8K views
PPTX
Unity5とUE4の比較
by
Masahiko Nakamura
12 slides
57.6K views
PDF
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
by
Tomohiro Kumagai
84 slides
11.3K views
PDF
サービスの成長を支えるフロントエンド開発 #denatechcon
by
DeNA
86 slides
4.4K views
PPTX
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
151 slides
96.1K views
Swift API Design Guidelines (dec 3, 2015)
by
Goichi Hirakawa
31 slides
4.3K views
プログラミング初心者の壁の越え方
by
Yuichi Kato
30 slides
6.5K views
SwiftにおけるClassとStructの使い分け
by
Kazunobu Tasaka
18 slides
3.3K views
Swift3.0に向けて enumerateを使い始めよう
by
Motoki Narita
33 slides
8.3K views
iOS開発 本当にあった怖い話
by
Kazuhiro Sakamoto
55 slides
3.5K views
誰でも出来るローカル開発環境の作り方
by
666oh666
29 slides
9.5K views
Eight meets Realm
by
Kazuhiro Sakamoto
28 slides
2.8K views
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
by
Roy Kim
71 slides
6K views
エンジニアのためのブログ勉強会(公開用)
by
Kenji Tanaka
47 slides
1.9K views
サーバサイドエンジニアが 1年間まじめにSPAやってみた
by
Itaru Kitagawa
50 slides
17.2K views
実践 Redux Saga -Practical Redux Saga-
by
Shinichiro Yoshida
151 slides
10.4K views
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
91 slides
49.3K views
20170302 tryswift tasting_tests
by
Kazuaki Matsuo
57 slides
8.2K views
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
by
小林 信行
50 slides
22.8K views
Unity5とUE4の比較
by
Masahiko Nakamura
12 slides
57.6K views
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
by
Tomohiro Kumagai
84 slides
11.3K views
サービスの成長を支えるフロントエンド開発 #denatechcon
by
DeNA
86 slides
4.4K views
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
151 slides
96.1K views
Similar to Applicative Functors in Swift
PDF
Functional Programming in Swift
by
Kaz Yoshikawa
31 slides
4.6K views
PDF
Swift らしい表現を目指そう #eventdots
by
Tomohiro Kumagai
56 slides
9.1K views
PDF
脱swift初心者するための2つのきっかけ
by
Daiki Mogmet Ito
45 slides
5.2K views
PDF
20141128 iOSチーム勉強会 My Sweet Swift
by
necocen
97 slides
2.2K views
PDF
Swiftでの関数型プログラミングについて考えていること
by
Shingo Sato
31 slides
8.8K views
PDF
Swift 2.0 で変わったところ「前編」 #cswift
by
Tomohiro Kumagai
80 slides
28.9K views
PDF
Swift 2.0 大域関数の行方から #swift2symposium
by
Tomohiro Kumagai
73 slides
12.8K views
PDF
Swift本ができるまで
by
yuki0211s
31 slides
4.2K views
PDF
Swift勉強会。はてなとかclosuresについて
by
Nobukazu Hanada
53 slides
7.9K views
PDF
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
79 slides
3.9K views
PDF
Better C#の脱却を目指して
by
bleis tift
20 slides
6.3K views
PDF
Swift Open Hours 2 - Swift ラボで聞いてきた話
by
Tomohiro Kumagai
41 slides
1.6K views
Functional Programming in Swift
by
Kaz Yoshikawa
31 slides
4.6K views
Swift らしい表現を目指そう #eventdots
by
Tomohiro Kumagai
56 slides
9.1K views
脱swift初心者するための2つのきっかけ
by
Daiki Mogmet Ito
45 slides
5.2K views
20141128 iOSチーム勉強会 My Sweet Swift
by
necocen
97 slides
2.2K views
Swiftでの関数型プログラミングについて考えていること
by
Shingo Sato
31 slides
8.8K views
Swift 2.0 で変わったところ「前編」 #cswift
by
Tomohiro Kumagai
80 slides
28.9K views
Swift 2.0 大域関数の行方から #swift2symposium
by
Tomohiro Kumagai
73 slides
12.8K views
Swift本ができるまで
by
yuki0211s
31 slides
4.2K views
Swift勉強会。はてなとかclosuresについて
by
Nobukazu Hanada
53 slides
7.9K views
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
79 slides
3.9K views
Better C#の脱却を目指して
by
bleis tift
20 slides
6.3K views
Swift Open Hours 2 - Swift ラボで聞いてきた話
by
Tomohiro Kumagai
41 slides
1.6K views
Applicative Functors in Swift
1.
Applicative Functors in Swift @kazu0620
2.
自己紹介 坂本 和大( @kazu0620
) Sansan株式会社 Eight事業部所属 過去に個人で開発したアプリ - 秘密のアルバム(40万DL!) - にゃんこ(15万DL!)
3.
はじめに
4.
Swift その2 Advent
Calendar 2015 • 「Optionalな文字列同士を良い感じに結合す る」という記事を書いた http://qiita.com/kazu0620/items/f2a6272c6b8b7bcbaa42
5.
• アプリカティブスタイルについてのコメント を@koher さんから頂いた!
6.
curry(+) <^> a
<*> b RunesとCurryというライブラリを利用すると上記の 様な表現が出来るとのこと!
7.
便利そうだが… • <*>とは? • curryって関数は何してるのか? •
<^>って何だろ? • 具体的に何がどう嬉しいのか?
8.
ので、調べてみた
9.
本日のゴール が何をしてるのか理解して、Runesでアプリカ ティブスタイルを使えるようになる! curry(+) <^> a
<*> b
10.
箱の話をしよう
11.
「文脈と値を持った箱」という ものがあるらしい • Optionalは箱(よく聞くやつ) • ArrayもOptionalと同じく箱(たまに聞くや つ) •
つまり...?
12.
reference: Functors, Applicatives,
And Monads In Pictures(最高の資料) http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html • 2(a)という「値」と、計算が失敗したかもしれな い(nilかもしれない)という「文脈」を持ってい る。
13.
reference: Functors, Applicatives,
And Monads In Pictures http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html • 箱に入った値に対して、関数を適用するには? • 箱から開けないと(unwrap)、関数を適用できな い
14.
箱を開けずに関数を適用する には?
15.
朗報 「箱」たちは、基本的にすべ て箱を開けずに値を操作する ための関数を持っている!
16.
map • mapは、箱を開けることなく値を操作するためのメ ソッド • さっきから「箱」と呼んでるものはこのmapという メソッドを備えている http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html reference:
Functors, Applicatives, And Monads In Pictures
17.
Fanctorとは?
18.
Fanctor • 実はすでにFanctorについては説明済み • さっきから言ってる「箱」
= Fanctor • Fanctorは、文脈(nilかもしれない…など)を持った値 • mapを使うと文脈を保ったまま関数を値に適用できる • 厳密には、Fanctor則と呼ばれるルールを満たす型のこと
19.
• mapを利用して、箱を開けることなく中の値 を操作できる。配列も同じ。 http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html reference: Functors,
Applicatives, And Monads In Pictures
20.
Applicative Functorとは?
21.
Applicative Functor • Fanctorのすごいやつ •
Swiftの場合は、言語仕様にはない。が、 Runesというライブラリを利用すれば実現で きる。 • 何ができるのか…?
22.
<*>
23.
<*>とApplicative Functor • Fanctorがmapを備えていたように、 Applicative
Functorは<*>を備えている • <*>は「箱に包まれた関数」と「箱に包まれ た値」を引数にとる
24.
<*>とApplicative Functor • 「箱に包まれた値」 •
「箱に包まれた関数?」 Optional(箱)の中にはクロージャだって格納できる
25.
<*>とApplicative Functor を に、箱を開けずに適用するには?
26.
<*>とApplicative Functor flatMap+mapでもできなくはないが… <*>を使った方がシンプル&わかりやすい! <*>は を
に適用している
27.
<*>とApplicative Functor http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html reference: Functors,
Applicatives, And Monads In Pictures Applicative Functorは、箱の中の関数を、箱 の中の値に適用してくれる!
28.
引数が複数ある関数 複数のOptional値に対して関数を適用したい とき<*>は便利! sumThreeElementsというOptionalではない値を引数 にとる関数をx, y, z(Optional)
に適用できてる! ・そして、さりげなく現れた「curry」
29.
引数が複数ある関数 curryは、Curryというライブラリのメソッ ド。これを呼び出さないと、 になる。<*>は「箱に包まれた関数」と「箱に 包まれた値」を引数にとる。 「箱に包まれた値」<*>「箱に包まれた値」
30.
引数が複数ある関数 これの返り値が関数であってほしい… 引数:x 返り値:yを引数とする関数(その返り値はzを引数 とする関数) にsumTreeElementsを変換することさえ出来れば…
31.
カリー化(高階関数) • 高階関数: 引数として関数をとったり返り値と して関数を返す関数 •
カリー化: 複数の引数をとる関数を、1つの引 数を取り、残りの引数をとる関数に定義を書 き換えること(多分)
32.
引数が複数ある関数 というわけで、Curryを利用してカリー化す ることで、複数の引数がある関数も適用でき るように! 返り値は「箱に包まれた関数」 返り値は「箱に包まれた関数」
33.
pure • +もカリー化して、<*>で繋げて書くことが出来る • pureは、.Someと同じ。「文脈を持った箱」のデ フォルト値で包む。 •
じゃ、.Someで良いじゃん?
34.
pure • xやyがOptional型とは限らない • アプリカティブスタイルは、アプリカティブ 則を満たす型なら何にでも適応できる •
pureを使っておけば中の値がArrayでも安心 同じ
35.
さらに • result1とresult2は同じ結果になる • このa.map(f)の記述は頻出なのでショートカットが用意 されている •
<^> !
36.
<^> • 上記の3つは、同じ処理 • <^>
を使うことで、(+)をxとyに適用するんだ ぞ、ということがわかりやすくなる
37.
というわけで
38.
curry(+) <^> a
<*> b • +という関数をカリー化し • Optionalのデフォルト値(.Some)でその関数を包み • <*>を使い、Optionalに包まれたaとbに、unrwap することなく+を適用している ※わかりやすさのためにOptionalと書いたが、アプリカティブ則を満たす型ならな んでも良い
39.
で、結局何が便利なの?
40.
アプリカティブスタイルのメリット • Optionalでない値を取る関数も、Unwrapせず にOptionalに適用できる • 複数のOptionalをUnwrapすることなく計算で きる •
プロダクトで使ってみて、他良いとこあったら共 有します!
41.
Functor, Applicative, そしてMonadについてもっと知り たい方は…
42.
We're hiring! • Sansan株式会社では、Swiftを書くのが好きなエ ンジニアを絶賛募集中 •
Kotlin好きなandoridエンジニアも絶賛募集中 • React.jsをゴリゴリ書きたいフロントエンジニア も • ruby/C#なエンジニアも!
43.
We're hiring! • 興味あれば、
wantedlyか会社の採用ページから 応募を! • https://www.wantedly.com/companies/ Sansan/projects • http://jp.corp-sansan.com/recruit/job/ index.html • (@kazu0620にコッソリ連絡くれる、でもOK)
44.
ご静聴ありがとうございました