隨著多核心電腦成為主流、分散式系統架構也成為顯學,函數式程式設計的重要性也與日俱增。跟物件導向程式設計相比,函數式程式設計著重於用更簡潔的方向表達程式碼真正的意圖。因此當學會用與物件導向程式程計不同的角度來寫程式後,可以讓你在切換不同的程式語言時依然能游刃有餘。
工作上用得到的函數式程式設計
隨著多核心電腦成為主流、分散式系統架構也成為顯學,函數式程式設計的重要性也與日俱增。跟物件導向程式設計相比,函數式程式設計著重於用更簡潔的方向表達程式碼真正的意圖。因此當學會用與物件導向程式程計不同的角度來寫程式後,可以讓你在切換不同的程式語言時依然能游刃有餘。
這門課將會透過容易上手的函數式語言 Elixir,教大家最重要的函數式程式設計觀念。接著介紹如何在 Ruby、JavaScript(也許還有一點 C#)上使用函數式程式設計的技巧。讓你寫出精簡、好除錯的漂亮程式碼!
透過這門課程,你將會學到:
工作上用得到的 Ruby / JavaScript 函數式程式設計手法。
函數式程式設計是什麼。
純函數式語言們寫起來是怎麼樣子。
函數式程式設計的基本概念、手法及好處。
好用的函數式 Library。
Get immediately download 工作上用得到的函數式程式設計
課程講師
蘇泰安 Taian Su
蘇泰安 Taian Su
三年電腦雜誌編輯,十年程式開發經驗。 Elixir.tw 及 RailsGirls Taiwan 共同主辦人。現任企業開發顧問及客座講師。專長為函數式及分散式編程,擅長 Elixir、JavaScript / React、Ruby 及 Haskell。
程式新手到進階必備!
不管你是前端工程師 、 Ruby 工程師或是擅長其他語言的前後端工程師,只要你是程式新手或是想要了解目前業界關注的 『函數式程式設計(Functional Programming)』的資深工程師,這門課都能讓你對寫程式這件事有全新的認識。
自 2014 Java SE 8 加入了 Lambda 功能之後,可說現代語言都有函數式程式設計的能力了。甚至在 Ruby 及 JavaScript 這類天生帶著函數式基因的語言裡,受限於舊的思考方式及長久以來的習慣,許多人還是持續用指令式的做法寫出繁瑣的程式。就算看了網路上的文章,也是會使用 map、reduce、filter 這些函式,卻不知道這背後有一整套優雅簡潔的世界觀。
為什麼要學函數式程式設計?
簡潔 + 強大 = 優雅
用更少的行數,更易懂的方式,寫出不容易出錯、好測試及閱讀的程式碼,也能看得懂 LeetCode 上厲害解法的思考脈絡了!
易於維護,容易閱讀和除錯
用全新的角度來理解程式組合及運作的方式。
跨程式語言的觀念
學會一種觀念,就能在 JavaScript、Ruby、Python、C# 3.0 及 Java 8.0 上寫出高效且漂亮優雅的解法。
課程大綱
投影片及補充教材
開始
投影片
開始
範例程式碼
Part 0 – 簡潔的程式碼與世界觀
預覽
簡介 (10:26)
開始
函式裡面有什麼 part 1 (8:43)
開始
函式裡面有什麼 part 2 (7:44)
預覽
為什麼要用 Elixir 教? (2:22)
Part 1 – Function 是什麼?
預覽
抽象系統 (8:37)
開始
一等公民(First-Class Citizen) (7:10)
開始
你的程式語言可不可以做這件事? (9:04)
開始
Elixir 中的兩種函式:具名與匿名 (8:32)
開始
為什麼要區分具名與匿名這兩種函式? (4:37)
開始
閉包(Closure) (4:56)
開始
不可變性(Immutable)part 1 (5:15)
開始
不可變性(Immutable)part 2 (6:28)
開始
其它語言是怎麼設計的?part 1 (3:47)
開始
其它語言是怎麼設計的?part 2 – Ruby 篇 (13:01)
開始
其它語言是怎麼設計的?part 3 – JavaScript 篇 (2:15)
開始
小結 (2:02)
Part 2 – Pattern Matching
開始
初試 Pattern Matching (9:03)
開始
利用 Pattern Matching 把結構裡的東西拆出來 (12:30)
開始
List 跟 Array 有什麼不一樣? (10:18)
開始
不是只有等號裡有 Pattern Matching (1:18)
開始
為什麼函數式很少用 if … else …? (4:55)
開始
【練習】FizzBuzz (1:50)
開始
【解答】FizzBuzz (3:50)
開始
switch … case 或 case … when 語法 (5:16)
開始
JavaScript 上的 Pattern Matching (2:54)
Part 3 – 遞迴與高階函式
開始
map 跟 each(或 for loop)的差別 (4:48)
開始
遞迴 (3:36)
開始
遞迴的問題 (3:22)
開始
尾呼叫優化(Tail Call Optimization) (7:08)
開始
遞迴與 reduce (5:30)
開始
接收函式的函式 – map 與 filter (6:25)
開始
並行(Concurrent)與平行(Parallel) (6:37)
開始
使用 Zip 函式來注入依賴 (8:47)
開始
flat_map 函式與 wrap 函式的組合技 (12:13)
開始
Pipe Operator (7:04)
開始
Functional Programming 的核心概念 (4:41)
Part 4 – 函式的組合
開始
函式組合 (6:57)
開始
資料轉換 (3:13)
開始
Elixir 與 Erlang part 1 – 背景簡介 (10:23)
開始
Elixir 與 Erlang part 2 – supervisor 與 worker (7:30)
開始
Elixir 與 Erlang part 3 – Phoenix 裡的 LiveView (6:15)
開始
Elixir 與 Erlang part 4 – 小結 (2:35)
開始
Curry Function part 1 – 函式的參數數量不正確會發生什麼事? (6:56)
開始
Curry Function part 2 – Ruby 實作版 (12:06)
開始
Curry Function part 3 – JavaScript 實作版 (11:11)
開始
Curry Function part 4 – Elixir 實作版 (5:26)
開始
方法(Method)vs 函式(Function) (7:33)
開始
在 mutable 語言中做出 closure (1:14)
開始
decorator – 原理介紹 (9:25)
開始
decorator – 使用 JavaScript 與 Ruby 實作 (10:06)
開始
Railway Oriented Programming (12:07)
開始
Optional Chainning (4:18)
開始
抽象層級與函式的型狀 (8:00)
Part 5 – 把 FP 的概念用在其它語言上
開始
整體策略 (6:38)
開始
連續操作過程中印資料 (9:38)
開始
JavaScript 篇 (6:57)
開始
Ruby 篇 (9:26)
Part 6 – 型別系統、容錯、平行化、Macro
開始
型別系統 (9:04)
開始
Macro (10:59)
開始
容錯與平行化 (15:12)
開始
小結 (8:08)
Read more: https://archive.li/RuBqz