實務上使用 FP 開發一年心得總結
隨著一年來都以 ECMAScript 為主力,前後端都搭配 Ramda 以 FP 開發,從一開始抱持著懷疑與摸索心態,逐漸地將 FP 原則套用在實際開發上後,發現 FP 並不只是理論而已,而是真的可以用在實戰,雖然學習門檻較高,但只要跨越之後,Codebase 可讀性與可維護性日後都會賺回來。
失くすものさえない今が強くなるチャンスよ
隨著一年來都以 ECMAScript 為主力,前後端都搭配 Ramda 以 FP 開發,從一開始抱持著懷疑與摸索心態,逐漸地將 FP 原則套用在實際開發上後,發現 FP 並不只是理論而已,而是真的可以用在實戰,雖然學習門檻較高,但只要跨越之後,Codebase 可讀性與可維護性日後都會賺回來。
無論學習 Ramda、Crocks 或 Sanctuary,會發現其文件有一種有別於 TypeScript 的 Type 表示法,稱為 Hindley-Milner Type System,這種表示法用於 Haskell,為 FP 廣泛使用的 Type 描述方式。
Functional Programming 要求 Data 與 Function 分離,其中 Data 要求的是 Immutable,而 Function 則是 Pure Function。這是 FP 的兩大基石,所有其他的特性都是由這兩個基本原則展開。
剛接觸 FP 時,Immutable 是讓我最不可思議的概念,Variable 天生就是拿來給人修改的,但 FP 卻教人 Immutable 不可修改,這是什麼奇怪思想呢 ?
Curry Function 最主要的目的在於 Function Composition,所以儘管是 多
個 Argument,最後也可變成多個 單一
Argument 的 Function 方便組合;而 Point-free 正是最適合 Function Composition 寫法。
在 Martin Fowler 的 Refactoring 一書,並沒有將 Extract Higher-order Function 列為標準技法,事實上這也是實務上天天都在使用的重構方式。
Currying 是 FP 的招牌菜,僅管了解 Currying 的定義,但似乎還是很難將 Currying 用在實務上;本文藉由 Ramda 的 Function 設計,從更務實角度學習 Ramda 怎麼發揮 Currying。
Functional Programming 近年逐漸受到重視,尤其 ECMAScript 本身具有 Functional 特質 (First-class Function、Closure、Higher-order Function),再加上 React、Redux、RxJS、Ramda … 等推波助瀾,FP 從理論走向實務,但也由於 FP 與 OOP 思維迥異,因此很多人視 FP 為異端而裹足不前,本文整理出 FP 三個最重要心法幫助大家學習。