JS之路 Day28 - Currying (柯里化)
柯里化是一個函數的運用技術,不只是JavaScript
裡面,它可以運用在很多的地方,簡單來說就是幫忙做了轉換。
原本的函式可能是長這樣的:
1 | fnc(A, B, C); |
柯里化後會變成這樣:
1 | fnc(A)(B)(C); |
這兩種方式最後出來的結果都是會一樣的,而怎麼實現的等等就會提到,
今天會從幾個角度介紹這個主題 =>
- 介紹與原理
- 目的與好處
介紹與原理
柯里化主要的用途是用來簡化呼叫函式的過程,像是說把呼叫 f(a,b)變成呼叫 f(a)以及 f(b),
就可以達成說,把一個很多參數的函式,切分成很多只有一個參數的函式。
舉例來說:
這是一個簡單的相加,它是一個有很多參數的函式。
1 | function plus(a, b, c) { |
使用柯里化的方式改寫,讓它變成很多只有一個參數的函式。
1 | function plus(a) { |
使用柯里化的方式後,可以一次性的呼叫多個,也可以讓最後只呼叫一個參數
1 | function plus(a) { |
其實最主要的概念就是這樣而已,這邊要記得兩件事情
- 柯里化不會去呼叫函式,只會對函式進行轉換
- 柯里化一次只會接受一個參數
而柯里化其實是藉由把函式當作參數,帶到另一個參數之中,讓傳遞到的最後一個函式回傳之前所有的結果。
目的與好處
可以用來拆分程式碼,把比較重要的部分給保留,固定住一部分,只要改另外一部分就好,不用每次都全部寫出來。
比如說如果兩個數字需要相乘:
1 | function multiply(a, b) { |
每次都需要填入兩個參數,但如果今天假如第一個數字是固定時,使用柯里化的方式就能夠,只填入一個參數達到相同的效果。
1 | const multiply = (num) => { |
不僅是減少重複的寫入,提高複用性,整體看起來的可讀性也會跟著上升。
同時也代表著不用在想著要傳入多少參數,一次就只要專心地傳遞一個,出現錯誤時可以更好的找出問題所在,那麼今天就介紹到這邊,明天見~
reference
[1] Currying - Wikipedia
[2] Currying
[3] Currying in JavaScript(柯里化)
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Vic's Blog!
評論