FP 的優點
可讀性、可預期、可重用
可讀性(Readability)
FP 相較於 imperative programming (命令式程式設計) 有著更佳的可讀性,意味著:不僅可以減少犯錯機會,也讓讀程式碼的人,更舒服的理解該程式碼在處理什麼問題。
範例 1: 以下有一個例子:以下有一個陣列我們將他取出偶數
再乘二
。
// 取偶數
const isEven = (val) => val % 2 === 0;
// 乘以二
const double = (val) => val * 2;
// data
const arr = [1, 2, 3, 4, 5];
// imperative 寫法:
let result = [];
for (let i = 0; i < arr.length; i++) {
if (isEven(i)) {
result.push(double(i));
}
}
console.log(result);
// [4,8];
// FP 寫法:
const result = arr.filter(isEven).map(double);
console.log(result);
// [4,8];
範例 2: 利用 curry、 compose 來改寫:
// 取偶數
const isEven = (val) => val % 2 === 0;
// 乘以二
const double = (val) => val * 2;
// data
const arr = [1, 2, 3, 4, 5];
// 使用curry 來組裝 double
const doubleC = curry((arr) => arr.map(double));
// 使用curry 來組裝 isEven
const isEvenC = curry((arr) => arr.filter(isEven));
// 使用組合技 compose
// 一行的可讀性是否又更高了呢 ?
const filterAanDouble = compose(doubleC, isEvenC);
console.log(filterAanDouble(arr));
// [4,8];
可預期(Predictability)
當我們在寫程式的同時,最害怕就是不可預期的錯誤,而 FP 本身就是 immutable 以及 pure function 的特性使我們減少程式內不可預期的結果,也減少 Side Effect 的產生
可重用(Reusable)
每個函式都只處理一件事是 FP 的特色,就好比樂高(Lego)積木,每塊積木只有一個功能,但組合再一起就會變成一個很驚人的模型,這些積木可以重複使用,組合出各式各樣的功能。