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
0
25
談談_Functional_Programming.pdf
CypressKuo
August 30, 2019
Tweet
Share
More Decks by CypressKuo
See All by CypressKuo
Deep-copying.pdf
cypresskuo
0
29
CSS_for_Web_Vitals.pdf
cypresskuo
0
35
談談_Code_review.pdf
cypresskuo
0
42
REST_vs_GraphQL_今夜はご注文はどっち.pdf
cypresskuo
0
21
CSS_重構.pdf
cypresskuo
0
22
跟上_JS_的腳步-ES2020.pdf
cypresskuo
0
26
Core_Web_Vitals.pdf
cypresskuo
0
51
這個時代人人都知道的敏捷開發.pdf
cypresskuo
0
55
Webassembly.pdf
cypresskuo
0
11
Other Decks in Technology
See All in Technology
slog.Handlerのよくある実装ミス
sakiengineer
4
480
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
470
Snowflake×dbtを用いたテレシーのデータ基盤のこれまでとこれから
sagara
0
120
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
190
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
2
270
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
500
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
970
新規プロダクトでプロトタイプから正式リリースまでNext.jsで開発したリアル
kawanoriku0
1
220
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
360
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
260
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
The Invisible Side of Design
smashingmag
301
51k
Why Our Code Smells
bkeepers
PRO
339
57k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Visualization
eitanlees
148
16k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Statistics for Hackers
jakevdp
799
220k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
It's Worth the Effort
3n
187
28k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
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!