Submit Search
Upload
Swiftでの関数型プログラミングについて考えていること
•
20 likes
•
8,750 views
Shingo Sato
Follow
もくもくiOS勉強会@ネクスト 1周年記念LT会
Read less
Read more
Software
Report
Share
Report
Share
1 of 31
Download now
Download to read offline
Recommended
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Roy Kim
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
The evolution of c#
The evolution of c#
leverages_event
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
Fujio Kojima
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
Recommended
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Roy Kim
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
The evolution of c#
The evolution of c#
leverages_event
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
Fujio Kojima
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
Kotlinについて学んだコト
Kotlinについて学んだコト
iPride Co., Ltd.
CoreDataでのsubqueryの使い方
CoreDataでのsubqueryの使い方
Masaru Ichikawa
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
関数型Swift
関数型Swift
S_Shimotori
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
KLabの社内勉強会紹介
KLabの社内勉強会紹介
KLab Inc. / Tech
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Api設計のつぶやき
Api設計のつぶやき
xyzplus_net
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hiroshi Kikuchi
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
Syo Ikeda
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
ssusered4a9d
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
Flang kkd1
Flang kkd1
florets1
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
More Related Content
What's hot
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
Kotlinについて学んだコト
Kotlinについて学んだコト
iPride Co., Ltd.
CoreDataでのsubqueryの使い方
CoreDataでのsubqueryの使い方
Masaru Ichikawa
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
関数型Swift
関数型Swift
S_Shimotori
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
KLabの社内勉強会紹介
KLabの社内勉強会紹介
KLab Inc. / Tech
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Api設計のつぶやき
Api設計のつぶやき
xyzplus_net
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hiroshi Kikuchi
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
Syo Ikeda
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
ssusered4a9d
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
What's hot
(20)
Win32 APIをてなずけよう
Win32 APIをてなずけよう
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Kotlinについて学んだコト
Kotlinについて学んだコト
CoreDataでのsubqueryの使い方
CoreDataでのsubqueryの使い方
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
関数型Swift
関数型Swift
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
真Intermediate languageのキホン
真Intermediate languageのキホン
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
KLabの社内勉強会紹介
KLabの社内勉強会紹介
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Api設計のつぶやき
Api設計のつぶやき
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hello! intermediate language
Hello! intermediate language
Final LINQ extensions III
Final LINQ extensions III
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
Similar to Swiftでの関数型プログラミングについて考えていること
Flang kkd1
Flang kkd1
florets1
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
Non-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
Kaleidox
Kaleidox
Tomoharu ASAMI
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Toshio Ehara
WikiWikiアジャイル
WikiWikiアジャイル
Fumio Kawakami
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
Yuto Suzuki
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3
Shin Yamamoto
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
Keisuke Takahashi
オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
iOSローカライズことはじめ
iOSローカライズことはじめ
俊輔 嶺村
Adobe JSX入門
Adobe JSX入門
silvers ofsilvers
Fn project爆誕
Fn project爆誕
Hiroshi Hayakawa
iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理
Tomoya Hayakawa
Swift入門
Swift入門
エンジニア勉強会 エスキュービズム
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
Yuuki Takezawa
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
Swift bondさわってみた
Swift bondさわってみた
Motoki Narita
Lombok ハンズオン
Lombok ハンズオン
Hiroto Yamakawa
Similar to Swiftでの関数型プログラミングについて考えていること
(20)
Flang kkd1
Flang kkd1
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Non-Functional Programming in Scala
Non-Functional Programming in Scala
Kaleidox
Kaleidox
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
WikiWikiアジャイル
WikiWikiアジャイル
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
オフラインファーストの思想と実践
オフラインファーストの思想と実践
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
iOSローカライズことはじめ
iOSローカライズことはじめ
Adobe JSX入門
Adobe JSX入門
Fn project爆誕
Fn project爆誕
iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理
Swift入門
Swift入門
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Swift bondさわってみた
Swift bondさわってみた
Lombok ハンズオン
Lombok ハンズオン
Swiftでの関数型プログラミングについて考えていること
1.
Swiftでの関数型プログラミングについて 考えていること @akio0911
2.
参考になる書籍 http://www.amazon.co.jp/dp/4274068854
3.
参考になる書籍 http://www.amazon.co.jp/dp/B00UY3K04O
4.
Multi-paradigm Swift is a
multi-paradigm, compiled programming language created by Apple Inc. for iOS, OS X, and watchOS development. https://en.wikipedia.org/wiki/Swift_(programming_language)
5.
Multi-paradigm • Object-oriented programming •
Protocol-oriented programming • Functional programming
6.
関数型プログラミングの特徴 • コード量が少なくなる • 最適化がしやすい •
並行/並列化がしやすい • バグり/バグらせにくい • ドキュメントが少なくなる 引用元 : 関数プログラミング実践入門 4ページ
7.
純粋関数型プログラミング言語 Haskell • 「何をするか」ではなく「何であるか」を伝える • 一度変数の値を設定すると、後でそれを別の値に変更することはできない •
関数は副作用を持たない(参照透明性) • 遅延評価 • 静的型付け言語 • 型推論 • エレガントで簡潔
8.
「何をするか」ではなく 「何であるか」を伝える CPUで行っていることと一対一で対応している
9.
「何をするか」ではなく 「何であるか」を伝える 「合計とは何か?」を書く 合計とは「1個目の数値 + 残りの要素の合計」である 要素数0の配列の合計は0である
10.
sum2([1, 2, 3,
4, 5]) 1 + sum2([2, 3, 4, 5]) 1 + (2 + sum2([3, 4, 5])) 1 + (2 + (3 + sum2([4, 5]))) 1 + (2 + (3 + (4 + sum2([5])))) 1 + (2 + (3 + (4 + (5 + sum2([]))))) 1 + (2 + (3 + (4 + (5 + 0)))) 1 + (2 + (3 + (4 + 5))) 1 + (2 + (3 + 9)) 1 + (2 + 12) 1 + 14 15
11.
reduce パックマン的な処理を書くための汎用的な処理
12.
0 1 2 3
4 50 + 1 -> 1 1 2 3 4 51 + 2 -> 3 3 3 4 53 + 3 -> 6 6 4 56 + 4 -> 10 10 510 + 5 -> 15 15 ・パックマンの初期値 ・パックマンに食わせるコレクション ・パックマンが食った後の新たなacc を指定できるのがreduce
13.
acc num new
acc rest 0 1 0 + 1 -> 1 [2, 3, 4, 5] 1 2 1 + 2 -> 3 [3, 4, 5] 3 3 3 + 3 -> 6 [4, 5] 6 4 6 + 4 -> 10 [5] 10 5 10 + 5 -> 15 []
14.
reduce パックマンをイメージすると、分かりやすく見えてくる
15.
一度変数の値を設定すると、 後でそれを別の値に変更することはできない
16.
varのデメリット var a =
10 様々な処理 let result = function(a) functionに何が渡されるかは ここをすべて読まないと断定できない
17.
letのメリット let a =
10 様々な処理 let result = function(a) ここだけ読めば、 functionに何が渡されるかが断定できる
18.
mutating keyword structではプロパティを書き換える場合はmutatingが必要 (classの場合は不要) varにしないといけない
19.
mutating keyword • 構造体を「データの入れ物(状態変化を伴う)」 ではなく、「構造を持つ1個のデータ」と考えて いるっぽい •
classはreference typeで状態を持つ。structは value typeで状態を持たない、という扱いをす ると良さそう
20.
状態を変化させず 新たなデータを生成する Swiftではletを使え!というメッセージを ここからも感じる letでOK! Swiftではletを使え!というメッセージをここからも感じる
21.
Higher-order function 引用元 :
Functional programming in Swift
22.
Higher-order function 座標を渡すと、それが領域内に含まれているか否かを Boolで返してくれる関数型を定義 これが意味深!
23.
Higher-order function 関数のインターフェースさえ えれば 部品として組み合わせられる。 クラスの継承などは部品として大げさな場合がある?
24.
Higher-order function 関数のインターフェースが っているので 部品としてかなり自由に組み合わせられる
25.
Operatorを定義すると便利に書ける ここらへんが微妙?強制アンラップしないと、 失敗する可能性のある処理を、次の処理につなげられない
26.
失敗する可能性のある処理を つなげられる演算子 参考 : http://qiita.com/koher/items/ 95583f58a443f6a33c28
27.
失敗する可能性のある処理を作る
28.
失敗する可能性のある処理をつなげる Optional Chain(a?.b?.c)の関数版? エラーを処理するif文などが不要になった。
29.
失敗する可能性のある処理を2つ合成して 失敗する可能性のある処理を1つ作る演算子
30.
失敗する可能性がある関数を部品としてつなげ合わせて 新しい部品を作れるようになった
31.
まとめ • 「何をするか」ではなく「何であるか」を書く • reduceは汎用的に使えるパックマン •
極力letを使って、追いかけやすい(追いかけなく ても良い)コードを目指そう • 高階関数を使えば非常に柔軟に書ける(クラスは部 品の実現方法として大げさな場合がある?) • 失敗する可能性のある処理をそのまま扱えると便利
Download now