Submit Search
Swiftでの関数型プログラミングについて考えていること
Sep 30, 2015
20 likes
8,768 views
Shingo Sato
もくもくiOS勉強会@ネクスト 1周年記念LT会
Read more
1 of 31
Download now
Download to read offline
Ad
Recommended
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
関数型プログラミング(Functional Programming=FP)初心者が説明するSwiftによるFP入門の入門です。SICPの第一章を若干意識して作りました。 スライドだけでは何を言いたいのかわかりにくいところもあるので、発表者ノート付きソーステキストも合せてごらんください: https://github.com/fhisa/CocoaStudy/blob/master/20151114/Swiftによる関数型プログラミング超入門.md
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Roy Kim
FPやHaskellのモナドをSwiftを使って説明してみたけど、過去のものなので今はあまり参考にならないかも。それと内容的にも少し修正が必要。
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
過去の勉強会で発表した「SwiftによるiOS開発再入門」「Objective-CプログラマのためのSwift導入法」を再構成して現時点で最新(beta6)仕様にアップデートしたものです。
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
C#でわかる こわくないMonad 2017.5.27 岐阜Sharp #gifsharp #fsharp
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
仙台 IT 文化祭 2017 で行った「C# 大好き MVP によるドキドキ・ライブコーディング対決!!」における、4 色オセロ対決のアルゴリズム解説資料
The evolution of c#
The evolution of c#
leverages_event
急速な勢いで拡大し続けるソーシャルゲーム業界において、その成長と同じ様に日々進化する「C#」は、想像を超える安定性と、ソーシャルゲームへの適応力を持っていることは知られていません。 しかしC#は、Visual Studio, SQL Server, Windows Serverなど、オールインワンで取り巻く環境が提供され、どれもが強力なGUIを備えているなど、非常に安定したリソースを備えている言語です。 2012年の現在もアップデートされている、進化し続けるC#のポテンシャルを余すことなくご説明します。
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
Fujio Kojima
こみゅぷらす Community Launch 2008 http://comuplus.net/clt2008/ 2008年6月14日
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
おっさんES6/ES2015,React.jsを学ぶ 2016JavaScript入門 2016/11/21 @BizReach D3イベント登壇資料 最近のJavaScript動向 ・試験に出るJavaScript21年の歴史 ES6/ES2015を学ぶ ・ES6/ES2015概要 ・ES5を振り返る ・altjsの意義 Reactを学ぶ ・DOCを読む ・Tutorialをやる まとめ ・今回の学習を通じて感じたこと
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
プロ生@名古屋 2015.12.12 http://www.kekyo.net/2015/12/12/5418
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
2009-10-23 FITEA最新技術ミニセミナー http://fitea.org/?p=112
Kotlinについて学んだコト
Kotlinについて学んだコト
iPride Co., Ltd.
2020/01/31の勉強会で発表したものです。
CoreDataでのsubqueryの使い方
CoreDataでのsubqueryの使い方
Masaru Ichikawa
CoreDataでのsubqueryの使い方
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
「iOSエンジニアがゼロだったじげんがどのように開発を行ったのか?」であったり、個人でSwift学習を行う際のpointなどをまとめた内容になっています。
関数型Swift
関数型Swift
S_Shimotori
#w8lt 6回目にやった関数型Swiftとかいう何か
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
NGK2015B - 名古屋合同懇親会2015忘年会
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
Intermediate Language Basics - The final. http://www.kekyo.net/2016/03/22/5710
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
セッションビデオ: https://www.youtube.com/watch?v=YF7n8YqEfCg ブログ: https://www.kekyo.net/2019/10/07/6995 2019.10.5 .NET Conf 2019 meetup in AICHI https://centerclr.connpass.com/event/143949/
KLabの社内勉強会紹介
KLabの社内勉強会紹介
KLab Inc. / Tech
KLabの社内勉強会紹介 KLab 福岡Meetup#2
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
関西モバイルアプリ研究会 #4での発表スライドです。
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
関西モバイルアプリ研究会 #5での発表スライドです。
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Shibuya.swift #1 LT
Api設計のつぶやき
Api設計のつぶやき
xyzplus_net
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hiroshi Kikuchi
shibuya.apk #7 で発表した(する)お話です
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
http://www.kekyo.net/2015/03/21/4786
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
Final LINQ extensions III - Center CLR part 4 session http://www.kekyo.net/2015/08/30/5259
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
Syo Ikeda
関西モバイルアプリ研究会 #2での発表スライドです。
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
ssusered4a9d
人生初登壇の勉強会資料です。
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
わんくま同盟大阪勉強会#57 セッション資料
Flang kkd1
Flang kkd1
florets1
関西関数型道場#01発表資料
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
デブサミ2014 2月14日 14-E-3 「アプリケーションエンジニアのためのクラウドインフラ再入門」 (2/3) 講演資 吉田さん、曽我部、輿水さんの順で発表した資料の2つめ(OpenStack編)になります 輿水さんの資料: http://www.slideshare.net/samemoon/20140214-dev-summit20140214
Ad
More Related Content
What's hot
(20)
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
プロ生@名古屋 2015.12.12 http://www.kekyo.net/2015/12/12/5418
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
2009-10-23 FITEA最新技術ミニセミナー http://fitea.org/?p=112
Kotlinについて学んだコト
Kotlinについて学んだコト
iPride Co., Ltd.
2020/01/31の勉強会で発表したものです。
CoreDataでのsubqueryの使い方
CoreDataでのsubqueryの使い方
Masaru Ichikawa
CoreDataでのsubqueryの使い方
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
「iOSエンジニアがゼロだったじげんがどのように開発を行ったのか?」であったり、個人でSwift学習を行う際のpointなどをまとめた内容になっています。
関数型Swift
関数型Swift
S_Shimotori
#w8lt 6回目にやった関数型Swiftとかいう何か
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
NGK2015B - 名古屋合同懇親会2015忘年会
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
Intermediate Language Basics - The final. http://www.kekyo.net/2016/03/22/5710
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
セッションビデオ: https://www.youtube.com/watch?v=YF7n8YqEfCg ブログ: https://www.kekyo.net/2019/10/07/6995 2019.10.5 .NET Conf 2019 meetup in AICHI https://centerclr.connpass.com/event/143949/
KLabの社内勉強会紹介
KLabの社内勉強会紹介
KLab Inc. / Tech
KLabの社内勉強会紹介 KLab 福岡Meetup#2
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
関西モバイルアプリ研究会 #4での発表スライドです。
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
関西モバイルアプリ研究会 #5での発表スライドです。
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Shibuya.swift #1 LT
Api設計のつぶやき
Api設計のつぶやき
xyzplus_net
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hiroshi Kikuchi
shibuya.apk #7 で発表した(する)お話です
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
http://www.kekyo.net/2015/03/21/4786
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
Final LINQ extensions III - Center CLR part 4 session http://www.kekyo.net/2015/08/30/5259
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
Syo Ikeda
関西モバイルアプリ研究会 #2での発表スライドです。
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
ssusered4a9d
人生初登壇の勉強会資料です。
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
わんくま同盟大阪勉強会#57 セッション資料
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
Similar to Swiftでの関数型プログラミングについて考えていること
(20)
Flang kkd1
Flang kkd1
florets1
関西関数型道場#01発表資料
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
デブサミ2014 2月14日 14-E-3 「アプリケーションエンジニアのためのクラウドインフラ再入門」 (2/3) 講演資 吉田さん、曽我部、輿水さんの順で発表した資料の2つめ(OpenStack編)になります 輿水さんの資料: http://www.slideshare.net/samemoon/20140214-dev-summit20140214
Non-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
Scala Kansai Summit 2017 #scala_ks
Kaleidox
Kaleidox
Tomoharu ASAMI
The Action Language for Cloud Applications.
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Toshio Ehara
2015/8/28(金) 天神LT勉強会2回目 〜JavaFXPorts(JavaFx + RoboVM)試したyo〜
WikiWikiアジャイル
WikiWikiアジャイル
Fumio Kawakami
Scrum Gathering 2014で行ったワークショップ資料です
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
Yuto Suzuki
社内勉強会のflywayの紹介を行いました。
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3
Shin Yamamoto
Materials of @scenee presentation in potatotips#3 at 2014/01/15
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
Keisuke Takahashi
2015/06/02に開催されたElixirの勉強会 Shinjuku.ex #10 の資料。 * イベント情報: http://shinjukuex.connpass.com/event/15229/ * PowerPointのファイルダウンロード: http://bit.ly/perfect_elixir_information_gathering 資料のライセンスはクリエイティブ・コモンズで、自己紹介ページのみBY・ND、それ以外は全てCCゼロ(いかなる権利も保有しない)です。必要に応じて自己紹介ページを取り除き、あとはご自由にご利用下さい。 改版を行った場合は、 http://twitter.com/keithseahus より、 #shinjukuex タグ付きでお知らせします。
オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
hitomedia night #5 2015/12/16 登壇資料
iOSローカライズことはじめ
iOSローカライズことはじめ
俊輔 嶺村
Swiftビギナーズ倶楽部 2016年1月9日 嶺村俊輔
Adobe JSX入門
Adobe JSX入門
silvers ofsilvers
五反田の2社合同勉強会でLTした
Fn project爆誕
Fn project爆誕
Hiroshi Hayakawa
Node学園28時限目でFn ProjectについてLTした時の資料です。
iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理
Tomoya Hayakawa
名古屋LT大会での発表資料
Swift入門
Swift入門
エンジニア勉強会 エスキュービズム
introduce swit language
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
Yuuki Takezawa
第84回php勉強会のPHPでフィールドインジェクションに挑戦する のスライドです。 フィールドインジェクション可能なライブラリはいくつかありますが、折角なのでSpring Frameworkに寄せて実装してみました 現在開発中のものです https://github.com/ytake/Iono.Container
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
06/25開催のSwiftLT会の発表資料です。 発表時からはスクリーンショットなど削除してコア部分のみに絞っています。 下記スライドもあわせてご覧下さい。(このスライドの更新・増補版です) http://www.slideshare.net/hasegawatomoki/swift2014
Swift bondさわってみた
Swift bondさわってみた
Motoki Narita
第50回 もくもくiOS 2周年LT会@Retty【最終回】での発表内容 http://connpass.com/event/22276/
Lombok ハンズオン
Lombok ハンズオン
Hiroto Yamakawa
Java Doでしょう #02(10/04 札幌) http://javado.connpass.com/event/20011/
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
Ad
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