在先前的章節中,我們了解到要如撰寫純函式、科里化,甚至是透過高階函式與複合函式的手段,讓我們的函式重組性、復用性更高。
但如果到目前為止,這些概念對於你來說,都還是不太熟悉,覺得撰寫 FP 函式有點麻煩的話,其實我們也可使用第三方的函式庫來幫我們做到函式的 FP 化。
在本章節中,我們首先要介紹的函式庫是:Lodash.js。
Lodash.js 是一個以 FP 設計模式為基礎的 JavaScript 函式庫,其中提供以 JavaScript 原型延伸的方法,讓開發者可以使用 FP 設計模式,用更快的方式完成一些計算的任務。
要使用 Lodash.js 服務的話,我們可以透過 CDN 服務,也就是在 HTML 檔案中,透過 Script 標籤載入 Lodash.js (註一):
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
接著就可以在 .js
檔案中,使用 _
來取用 Lodash.js 所提供的方法:
const formatArray = _.join(['a', 'b', 'c'], '~');
console.log(formatArray);
// 'a~b~c'
除了 CDN 服務之外,我們也可以使用 NPM 工具安裝,以下是官方推薦的安裝方式:
$ npm i -g npm
$ npm i --save lodash
如果是使用 yarn 作為安裝工具的話指令會是:
$ yarn add lodash
安裝好後,就可以在 .js
檔案中將要使用的方法引入:
import { join } from 'lodash';
const formatArray = join(['a', 'b', 'c'], '~');
console.log(formatArray);
// 'a~b~c'
是不是用起來非常方便呢?
如果我們再仔細觀察上述範例參數帶入的數量,會發現 Lodash 這個函式庫比較多都是使用純函式,而不是科里化過後的函式,這樣會產生額外的問題:漏帶參數,或是沒有辦法針對單一參數進行固定。
為了解決這個問題,Lodash 針對使用進階的 FP 的開發者,也有提供讓 Lodash 寫起來更 FP 的指南,在指南中有提供把所有的方法都進行科里化的方式。
在之前的章節中,我們針對函式的柯里化進行介紹,同時也實作了簡易的柯里化函式,但如果我們想要針對函式做優化,也可以透過 Lodash 函式庫中所提供的 curry
方法快速做到。
舉例來說,這是我們上一章節未經柯里化的函式範例:
const makeName = (firstName, secondName) => `First name is ${firstName}; second name is ${secondName}.`;
此時我們可以透過 curry
方法:
const makeName = (firstName, secondName) => `First name is ${firstName}; second name is ${secondName}.`;
// 使用 CDN
const curriedMakeName = _.curry(makeName);
const firstNameIsVivian = curriedMakeName('Vivian');
console.log(firstNameIsVivian('David'));
// First name is Vivian; second name is David.
console.log(firstNameIsVivian('Rose'));
// First name is Vivian; second name is Rose.
很厲害吧!就算我們不自己寫一個柯里化的函式,同樣可以透過 Lodash 所提供的 curry
方法獲得固定參數的效果!
如果使用 UMD 的方式引入方法的話,程式碼會是:
import { curry } from 'lodash';
const makeName = (firstName, secondName) => `First name is ${firstName}; second name is ${secondName}.`;
const curriedMakeName = curry(makeName);
...省略
簡單來說,即便你搞不懂如何透過利用執行堆疊的機制,來撰寫柯里化的函式,也可以輕鬆透過 Lodash 這個函式庫提供的 curry
方法,使用固定參數的技巧提高自己程式碼的複用性。
當然,Lodash 函式庫不僅僅是能幫助我們做到簡易柯里化的效果,其中還有非常多可以簡化前端任務的方法,在下一個章節中,我們會繼續介紹,那就下一個章節見吧!