FP101

工作上用得到的函數式程式設計

透過容易上手的函數式語言 Elixir ,讓你寫出精簡、好除錯的漂亮程式碼!

隨著多核心電腦成為主流、分散式系統架構也成為顯學,函數式程式設計的重要性也與日俱增。跟物件導向程式設計相比,函數式程式設計著重於用更簡潔的方向表達程式碼真正的意圖。因此當學會用與物件導向程式程計不同的角度來寫程式後,可以讓你在切換不同的程式語言時依然能游刃有餘。 這門課將會透過容易上手的函數式語言 Elixir,教大家最重要的函數式程式設計觀念。接著介紹如何在 Ruby、JavaScript(也許還有一點 C#)上使用函數式程式設計的技巧。讓你寫出精簡、好除錯的漂亮程式碼!

現在報名只要 NT$3,000
  • 終身存取權
  • 可行動裝置使用
  • 課程時長:7.1 小時
  • 結業證書

講師介紹

使用者大頭貼

蘇泰安

三年電腦雜誌編輯,十年程式開發經驗。 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 上寫出高效且漂亮優雅的解法。

透過這門課程,你將會學到:

  • 工作上用得到的 Ruby / JavaScript 函數式程式設計手法。
  • 函數式程式設計是什麼。
  • 純函數式語言們寫起來是怎麼樣子。
  • 函數式程式設計的基本概念、手法及好處。
  • 好用的函數式 Library。

課程章節

投影片及補充教材

投影片

範例程式碼

Part 0 - 簡潔的程式碼與世界觀

00 : 29 : 17

簡介

函式裡面有什麼 part 1

08 : 43

函式裡面有什麼 part 2

07 : 45

為什麼要用 Elixir 教?

Part 1 - Function 是什麼?

01 : 15 : 50

抽象系統

一等公民(First-Class Citizen)

07 : 11

你的程式語言可不可以做這件事?

09 : 05

Elixir 中的兩種函式:具名與匿名

08 : 32

為什麼要區分具名與匿名這兩種函式?

04 : 37

閉包(Closure)

04 : 56

不可變性(Immutable)part 1

05 : 15

不可變性(Immutable)part 2

06 : 29

其它語言是怎麼設計的?part 1

03 : 47

其它語言是怎麼設計的?part 2 - Ruby 篇

13 : 01

其它語言是怎麼設計的?part 3 - JavaScript 篇

02 : 16

小結

02 : 03

Part 2 - Pattern Matching

00 : 51 : 59

初試 Pattern Matching

09 : 04

利用 Pattern Matching 把結構裡的東西拆出來

12 : 31

List 跟 Array 有什麼不一樣?

10 : 19

不是只有等號裡有 Pattern Matching

01 : 18

為什麼函數式很少用 if ... else ...?

04 : 56

【練習】FizzBuzz

01 : 50

【解答】FizzBuzz

03 : 50

switch ... case 或 case ... when 語法

05 : 17

JavaScript 上的 Pattern Matching

02 : 54

Part 3 - 遞迴與高階函式

01 : 10 : 16

map 跟 each(或 for loop)的差別

04 : 48

遞迴

03 : 37

遞迴的問題

03 : 22

尾呼叫優化(Tail Call Optimization)

07 : 08

遞迴與 reduce

05 : 30

接收函式的函式 - map 與 filter

06 : 25

並行(Concurrent)與平行(Parallel)

06 : 38

使用 Zip 函式來注入依賴

08 : 48

flat_map 函式與 wrap 函式的組合技

12 : 14

Pipe Operator

07 : 04

Functional Programming 的核心概念

04 : 42

Part 4 - 函式的組合

02 : 05 : 27

函式組合

06 : 58

資料轉換

03 : 14

Elixir 與 Erlang part 1 - 背景簡介

10 : 24

Elixir 與 Erlang part 2 - supervisor 與 worker

07 : 31

Elixir 與 Erlang part 3 - Phoenix 裡的 LiveView

06 : 16

Elixir 與 Erlang part 4 - 小結

02 : 36

Curry Function part 1 - 函式的參數數量不正確會發生什麼事?

06 : 56

Curry Function part 2 - Ruby 實作版

12 : 07

Curry Function part 3 - JavaScript 實作版

11 : 12

Curry Function part 4 - Elixir 實作版

05 : 27

方法(Method)vs 函式(Function)

07 : 33

在 mutable 語言中做出 closure

01 : 14

decorator - 原理介紹

09 : 26

decorator - 使用 JavaScript 與 Ruby 實作

10 : 06

Railway Oriented Programming

12 : 07

Optional Chaining

04 : 19

抽象層級與函式的型狀

08 : 01

Part 5 - 把 FP 的概念用在其它語言上

00 : 32 : 42

整體策略

06 : 38

連續操作過程中印資料

09 : 39

JavaScript 篇

06 : 58

Ruby 篇

09 : 27

Part 6 - 型別系統、容錯、平行化、Macro

00 : 43 : 25

型別系統

09 : 05

Macro

10 : 59

容錯與平行化

15 : 12

小結

08 : 09

FP101

工作上用得到的函數式程式設計

現在報名只要 NT$3,000
  • 終身存取權
  • 可行動裝置使用
  • 課程時長:7.1 小時
  • 結業證書

其他課程推薦