點燈坊
Curry Function 最主要的目的在於 Function Composition,所以儘管是 多
個 argument,最後也可變成多個 單一
argument 的 function 方便 composition。
那 argument 該怎樣的設計才適合 composition 呢 ? 這就是本文的主題:Point-Free Style。
Ramda 是 Clojure 在 JavaScript 的實作,讓我們可以將更多 FP 特性在 JavaScript 實現。
本文將以 Angular 與 TypeScript 為例,示範如何在 Angular 使用 Ramda。
SonarQube 是一套 程式碼品質檢查工具
,可以幫我們檢查 code 的 bugs、 vulenrability、code smell 與 duplication,也屬於 持續整合
重要的一環。
SonarQube 已經內建 SonarJava,可以直接對 Java 進行檢查,本文將以 Java + Gradle 為例,並在 Eclipse 中使用 SonarLint 對 Java 專案進行檢查。
不只 OOP 有 Design Pattern,事實上 FP 也有不少 Pattern,而 Currying 算是 FP 最基礎、且用的最多的 Pattern。
一些正統 FP 語言,如 Haskell、Clojure、F#、ReasonML … 都在語言內直接支援 Currying;JavaScript 雖然沒有直接支援,但因為 JavaScript 有 First-class Function 與 Closure,使得 Currying 在 JavaScript 中使用成為可能。
.NET Core 為跨平台解決方案,我們可在 macOS 或 Windows 開發 .NET Core App,最後再發佈到 Linux 主機上。
.NET Core 提供 FDD 與 SCD 兩種發佈方式。
實務上常會發現需要兩個物件的 method,但礙於 JavaScript 只能 單一繼承
於 prototype,我們無法同時繼承兩個物件;但透過 Mixin,我們可實現類似 多重繼承
的功能。
無論使用 TDD 或 Design Pattern,最後一定會經歷 Refactoring 階段,處理程式碼共用部分,避免違反 DRY 原則。
在傳統 OOP,我們會使用 Pull Member Up
將共用 method 抽到 abstract class;但若使用 FP,我們則有新的武器:將共用部分抽成 Higher Order Function,將不共用部分以 Lambda 傳入。