點燈坊

失くすものさえない今が強くなるチャンスよ

タグ : Ramda

Ramda 初體驗

一直很羨慕 F# 的 List Module 提供了豐富的 Function,而 ECMAScript 的 Array.prototype 卻只提供有限的 Function 可用,因此無法完全發揮 FP 威力。但這一切終於得到解決,Ramda 擁有豐富的 Function,且很容易自行開發 Function 與 Ramda 整合實現 Function Pipeline。

使用 range() 建立連續值 Array

range() 也算實務上常用的 function,只要傳入 初始值結束值,就可建立 Array,在很多語言都有內建 range(),但可惜 ECMAScript 並沒有,但 Ramda 已經內建 range(),可直接使用。

使用 is() 判斷 Type

ECMAScript 雖然有提供 instanceof,但其為 Operator,因此無法達成 Fuction Composition,而 Ramda 的 is() 正是 instanceof 的 Function 版本。

使用 pathOr() 提供預設值拆解 Object

實務上我們常需要讀取 Object 的 Property,但我們並不確定 Object 是否有該 Property,最嚴謹的做法必須先檢查 Property 是否存在才能讀取,否則在 Runtime 可能會得到 Cannot read property xxx of undefined 的錯誤訊息。

使用 path() 拆解 Object

若 Function 的 argument 是很深層的 object,可以使用 ECMAScript 2015 的 Object Destructuring 加以拆解,除此之外,也可以使用 Ramda 的 path()

使用 tap() Debug Ramda

初學者學習 FP 或 Ramda,會發現在 Imperative 下 Break Point 大法失效了,因為在 Pipeline 或 Compose 下,根本無從下 Break Point,此時該如何 Debug 呢 ?

如何使 Callback Point-free ?

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

如何判斷變數型別 ?

ECMAScript 雖然是 Dynamic Type Language,但並不代表 Variable 沒有 Type,只是其內建獲得 Type 方法包含太多 驚喜,成為備受爭議部分。本文整理出 4 種獲得 Type 方式,各有其優缺點,最後自訂 typeof_(),可判斷各種 Type。