念念不忘,必有迴響。有一口氣,點一盞燈,有燈就有人。

Ramda 之 pick()

Ramda 之 pick()

實務上最常使用的 map(),就是從 Object 眾多 Property 中,僅擷取部分 Property,Ramda 提供了 pick() 達成此功能。

Ramda 常見的 Point-free 技巧

Ramda 常見的 Point-free 技巧

若只求結果正確,Ramda 其實不難,而是難在如何湊 Point-free,很多看似簡單,卻會讓你想破頭,本文整理出幾個常見的技巧,可以視為 Pattern 使用。

Ramda 之 ifElse()

Ramda 之 ifElse()

寫程式免不了要使用 if else 判斷,但 if else 是 Imperative 產物,這種寫法會使得 Pipeline 中斷而無法 Compose Function,所幸 Ramda 亦提供 ifElse() operator,使我們能不中斷繼續 Pipeline。

Ramda 之 chain()

Ramda 之 chain()

chain() 屬於 Ramda 較高級的 operator,在其他 FP 也稱為 flatMap()apply(),尤其當 data 為 function 時,將有意想不到的作用。

如何使用 Ramda 實作 range() ?

如何使用 Ramda 實作 range() ?

range() 也算實務上常用的 function,只要傳入 初始值結束值,就可建立 Array,在很多語言都有內建 range(),但可惜 ECMAScript 並沒有,我們就使用 Ramda 與 FP 思維來實作吧。

Ramda 之 prop()

Ramda 之 prop()

同一個需求在 Ramda 常有不同的寫法,取決於你對 Operator 熟悉程度與經驗,隨著 Ramda 功力的提升,就能寫出更精簡的程式碼。

Ramda 之 curry()

Ramda 之 curry()

Ramda 之 curry() 也是非常實用的 Operator,他能將普通 function 轉成 Curried Function,這在 FP 語言算是標準配備,但一直到目前為止,ECMAScript 都還沒有正式支援,而 Curried Function 對於寫出 Point-free Style 有很大的貢獻。

Ramda 之 any()

Ramda 之 any()

實務上我們常需判斷某一個值是否存在於 Array 內,若存在則傳回 true,若不存在則傳回 false

Ramda 之 find()

Ramda 之 find()

find() 為 Ramda 常用的 Operator,常搭配 propEq()equals() Operator 一併使用。

Ramda 初體驗

Ramda 初體驗

一直很羨慕 F# 的 List module 提供了豐富的 Operator,而 ECMAScript 的 Array.prototype 卻只提供有限的 Operator 可用,因此無法完全發揮 FP 威力。

但這一切終於得到解決,Ramda 擁有豐富的 Operator,且很容易自行開發 Operator 與 Ramda 整合使用。