Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
談談_Functional_Programming.pdf
Search
CypressKuo
August 30, 2019
Technology
32
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
談談_Functional_Programming.pdf
CypressKuo
August 30, 2019
More Decks by CypressKuo
See All by CypressKuo
Deep-copying.pdf
cypresskuo
0
41
CSS_for_Web_Vitals.pdf
cypresskuo
0
46
談談_Code_review.pdf
cypresskuo
0
52
REST_vs_GraphQL_今夜はご注文はどっち.pdf
cypresskuo
0
27
CSS_重構.pdf
cypresskuo
0
30
跟上_JS_的腳步-ES2020.pdf
cypresskuo
0
35
Core_Web_Vitals.pdf
cypresskuo
0
61
這個時代人人都知道的敏捷開發.pdf
cypresskuo
0
65
Webassembly.pdf
cypresskuo
0
17
Other Decks in Technology
See All in Technology
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
5.1k
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
150
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
12
8.7k
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
670
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
280
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
1
300
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
420
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
320
発表と総括 / Presentations and Summary
ks91
PRO
0
140
Kaggleで成長するために意識したこと
prgckwb
2
420
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
500
Code Review Best Practice
trishagee
74
20k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Ruling the World: When Life Gets Gamed
codingconduct
0
280
Skip the Path - Find Your Career Trail
mkilby
1
170
The Cult of Friendly URLs
andyhume
79
6.9k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
We Have a Design System, Now What?
morganepeng
55
8.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Transcript
談談 Functional Programming CypressKuo @前端組例會 2019/08/30
In computer science, functional programming is a programming paradigm. --wikipedia
None
None
None
None
Function 的特色 First-class High Order Function No side effect Referential
transparency Pure Function
First-class 函數與其他數據類型一樣,處於平等地位。 • 被賦值到其他變數 • 作為參數傳入到不同的函數中 • 作為函數的回傳值
None
High Order Function 滿足以下兩項其中之一的函數 • 將函式當成參數傳入的函式 • 將函式當成回傳值的函式
None
常見的 High Order Function Array.prototype.map(foo) Array.prototype.filter(foo) Array.prototype.reduce(foo) Array.prototype.forEach(foo) Array.prototype.some(foo) Array.prototype.every(foo)
No side effect 沒有與外部互動,產生與運算無關的其他結果。 anti pattern: • 發送 http request
• 印出 console • 取得使用者的 input
Referential transparency 不管外部環境如何,只要參數相同,函式執行的返回結果必定相同。
Pure Function 結合 no side effect 與 Referential transparency 一個
function 給予相同的參數, 永遠會回傳相同的返回值,並且沒有任何顯著的副作用。
None
None
Function Composition Curry Compose
Curry 將一個有 N 個參數的函數轉換成 N 個只有一個參數的函數
None
Compose 把兩個以上的一個參數函數合併起來串聯多個組合成新的函數
None
Functor 範疇間的一類映射 F(f . g) = F(f) . F(g) (
. 代表 compose) F 就是 Functor
None
抽象化 縮減一個概念或是一個現象的資訊含量來將其廣義化的過程
🍎 + 🍎 = 🍎🍎 🍌 + 🍌 = 🍌🍌
(🍎🍎) + (🍎🍎) + (🍎🍎) = 🍎🍎🍎🍎🍎🍎 (🍌🍌) + (🍌🍌) + (🍌🍌) = 🍌🍌🍌🍌🍌🍌 抽象化
1 + 1 = 2 進一步 => fn(1, 1) ->
2 // fn = (a, b) => a + b; 2 + 2 + 2 = 6 進一步 => 2 * 3 = 6 再進一步 => fn(2, 3) -> 6 // fn = (a, b) => a * b; 抽象化
資料與功能分離,不要直接操作資料 抽象化 in FP
None
None
實例
優勢: • 可讀性高 • 可維護性高 • 簡潔,開發快速 劣勢: • 難以入門
優劣
If all you have is a hammer, everything looks like
a nail. 活用工具,不是被工具所用。 結論
Q & A
• https://speakerdeck.com/s6323859/abstract-thinking-cong-functional-programming-k an-jian-cheng-shi-zhi-mei • https://docs.google.com/presentation/d/1ZvBmQlNoeTOxV5oArnOcES-iswSqPovTe Y4hyWz3N0c/edit?usp=sharing • http://www.ruanyifeng.com/blog/2017/03/pointfree.html 參考資料
wish you a nice day!