on
Concept of Currying
“Currying is the process of turning a function with multiple arity into a function with less arity” — Kristina Brainwave
In simple words, currying is a method in programming in which we can transform a function with multiple arguments into a nested functions. It returns a new function that expects the next argument.
So, currying transforms a function with multiple arguments into a series of functions each taking a single argument.
Let’s look at a simple example:
function multiply(a, b, c) { return a * b * c;}This function takes three numbers, multiplies the numbers and returns the result.
multiply(1,2,3); // 6Let’s create a curried version of the same function and see how we would call the same function and get the same result :
function multiply(a) {
return (b) => {
return (c) => {
return a * b * c
}
}
}
multiply(1)(2)(3) // 6
Above as you can see we have turned the multiply(1,2,3) function call to multiply(1)(2)(3) multiple function calls.
Is Currying useful?
Avoid frequently calling a function with the same argument:
For example, we have a function to calculate the volume of a cylinder:
function volume(l, w, h) { return l * w * h;}It happens that all the cylinders are of height 100m.
You will see that you will repeatedly call this function with h as 100:
volume(200,30,100) // 20030100
volume(32,45,100); //144000lTo resolve this, you curry the volume function(like we did earlier):
function volume(h) {
return (w) => {
return (l) => {
return (l * w * h)
}
}
}
We can define a specific function for a particular cylinder height:
const CylinderHeight = volume(100);
CylinderHeight(200)(30); // 600,000lConclusion
Currying is a transform that makes function(a,b,c) as function(a)(b)(c).
Currying allows to easily get partials function. As we’ve seen in the volume example: the universal function log(h, w, l) after currying gives us partials when called with one argument like function(h) or two arguments function(w, l).