Javascript Currying and partials
sougato Pal
Posted on December 13, 2021
Currying and partials have become the common interview questions for Javascript nowadays. These are very important to functional programming. While underlying concepts is common in both of then there are some differences as well
Currying
Currying is pattern in which a function which takes multiple arguments is transformed into series of function which takes one argument and produce the same result.
sum(2,3)
is transformed to sum(2)(3)
To achieve this we need to have curry function which takes any function as an argument and transform into a curried function.
Though it may look complex the underlying logic is simple and easy to understand if you know about Javascript closures. We need to compare the number of arguments which is passed to the curried function with that of function signature. As long as it is lesser than that of function signature, We need to return a closure which will have reference to earlier arguments like this:
function curry(func){
return function curried(...args){
if(args.length >= func.length){
return func.apply(this,args)
}else{
return function(...args2){
return curried.apply(this,args.concat(args2))
}
}
}
}
function sum(a, b, c){return a+b+c}
sum(1,2,3) //6
let c1 = curry(sum);
c1(1,2,3) //6
c1(1)(2)(3) //6
Partials
A partials function takes a function and return a function which takes fewer arguments.Some arguments are kind of attached to it internally. This is also implemented through closures and are similar to currying
Lets us assume we have function which multiply two number
function multiply(a,b){return a * b}
We can use the multiply function to create a Square of a number.
function createSquarePartial(fn){
return function(args){
return fn(args,args)
}
}
We can then use it to transform the multiply function to take a single argument and return the square of it.
var getSquare = createSquarePartial(multiply)
getSquare(5) // 25
Thus we can see getSquare takes a single argument and return the square of the number using the multiply function.
Posted on December 13, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.