currying function’s usages, pros and cons

‘Currying’ has the same spelling as Curry that we love.
But Currying is originated from the name Haskell Brooks Curry who was known as mathematician and logician.
Currying is a technique that converting multiple arguments function into a single argument functions sequence.
Like this.
func(a, b, c) -> f(a)(b)(c)
Three arguments function is converted into three functions with single argument each.
f(a) returns value and (b) takes this value as a parameter. (c) also do the same thing. Get’s (b)‘s return value and return.
//non-curried function plusFunc(a, b, c){ console.log(a + b + c); } plusFunc(1, 2, 3); // 6 //curried function plusFunc(a){ return function(b){ return function(c){ console.log(a + b + c); } } } plusFunc(1)(2)(4); // 7
Then what are the differences between Curried and Non-curried?
non-curried : Function will be immediately executed even though parameters are not passed.
? Function definition : func(a, b, c)
? Function execution : func(a)
? Execution result : func(a, undefined, undefined)
curried : Execution will be suspended if parameters are not fully passed.
? Function definition : func(a, b, c)
? Function execution : func(a)
? Execution result : func(a) waits for b parameter.
So we can use currying as below.
function setAppell(appell){ return function(name) { console.log(appell + name); } } const setName = setAppell('Mr.'); setName('Right'); // Mr.Right setAppell('Mr.')('Baker'); //Mr.Baker //ES6 화살표 함수 const setAppell = appell => name => console.log(appell + name); const setName = setAppell('Miss.'); setName('Dior'); // Miss.Dior
If we use currying function, we can also pass event and value together.
const setNumber = (num) => (event) => { console.log(event.target.id+':'+num); } <div onClick="setNumber(2)(event)" id='myNum'> click </div> // myNum:2
What is Pros.
? Pros
– Reusable
– Reduced amount of code
– Readability
And Cons.
? Cons
– Deeply nested functions cause memory and speed issue. So Currying
Mathematical Explanations of Currying
Most of the functions can be implemented without using currying. but you can expect a good effect if you use currying to improve productivity through reusability or readability.