iT邦幫忙

2022 iThome 鐵人賽

DAY 26
1
Modern Web

致 JavaScript 開發者的 Functional Programming 新手指南系列 第 26

Day 26 :第三方函式庫(1):初識Lodash.js

  • 分享至 

  • xImage
  •  

在先前的章節中,我們了解到要如撰寫純函式、科里化,甚至是透過高階函式與複合函式的手段,讓我們的函式重組性、復用性更高。

但如果到目前為止,這些概念對於你來說,都還是不太熟悉,覺得撰寫 FP 函式有點麻煩的話,其實我們也可使用第三方的函式庫來幫我們做到函式的 FP 化。

在本章節中,我們首先要介紹的函式庫是:Lodash.js。

什麼是 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 柯里化函式

在之前的章節中,我們針對函式的柯里化進行介紹,同時也實作了簡易的柯里化函式,但如果我們想要針對函式做優化,也可以透過 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 函式庫不僅僅是能幫助我們做到簡易柯里化的效果,其中還有非常多可以簡化前端任務的方法,在下一個章節中,我們會繼續介紹,那就下一個章節見吧!

註解:

  1. 其他 Lodash.js CDN 版本可參考此網站

參考資料:

  1. Lodash.js
  2. Lodash - FP Guide
  3. Lodash - Github

上一篇
Day 25:高階函數與複合函數(3):reduce 實用方法
下一篇
Day 27 :第三方函式庫(2):從 Lodash.js 深入了解 JavaScript
系列文
致 JavaScript 開發者的 Functional Programming 新手指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
鱈魚
iT邦研究生 5 級 ‧ 2022-09-29 17:57:30

Lodash 本體好像不是依照 FP 為原則設計,FP 的版本好像會推薦引入 lodash/fp

或是考慮專為 FP 打造的 Ramda

我要留言

立即登入留言