iT邦幫忙

2024 iThome 鐵人賽

DAY 24
1
Modern Web

JavaScript學習筆記系列 第 24

[Day 24] 柯里化 Currying

  • 分享至 

  • xImage
  •  

柯里化(Currying)他的名字就想到咖哩XD

Wikipedia:In mathematics and computer science, currying is the technique of translating a function that takes multiple arguments into a sequence of families of functions, each taking a single argument.

在數學和計算機科學中,柯里化(Currying))是一種技術,將原本接收多個參數的函式轉換成連續函式,讓每個函式只接收一個參數。

簡單說就是將原本多個參數一次處理,搭配閉包的特性變成一次處理一個參數

基本範例

function sum(x, y) {
  return x + y;
}

sum(5, 7); //12

原本在寫函式我都會寫這樣,把要的參數全部放一起傳入,sum函式回傳結果為12。

//柯里化
function sum(x) {
  return function (y) {
    return x + y;
  };
}

sum(5)(7);

改寫成柯里化後,sum函式接受一個參數x,然後回傳一個新的函式,回傳的函式接受第二個參數y,最後回傳兩者相加的結果。

也有看到其他種呼叫的寫法:

function sum(x) {
  return function (y) {
    return x + y;
  };
}

const addTwoNumber = sum(5);
addTwoNumber(7);

這種方式將sum(5)的結果存在addTwoNumber變數中,當呼叫addTwoNumber(7)時,它把之前傳入的5和新的y值來計算結果。

存放變數的好處是,可以隨時傳入第二個參數,重複使用變數,並多次傳入不同的參數來增加靈活性。

而使用sum(5)(7)是一次完成兩步驟,立即得到結果。

用箭頭函式的柯里化

使用箭頭函式可以讓語法更簡潔,之後會再介紹箭頭函式,這邊先稍微提到怎麼改寫。

const sum = (x)=> (y) => x + y;

sum(5)(7);

以上分享~謝謝!

參考資料

Currying in JavaScript(柯里化)
[JS] Functional Programming and Currying
Currying in JavaScript Explained With Examples


上一篇
[Day 23] 動手做一個new 運算子吧!
下一篇
[Day 25] Array method常用介紹 - forEach()、map()、filter()、fill()
系列文
JavaScript學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言