Currying is a technique of splitting functions with one or more arguments into a sequence of functions that are invokable with predefined arguments. In other words, you can split fn (a,b,c) into fn(a)(b)(c).

That was not quite helpful - let us see an example.

let getSquared = (x, y) => {
  return x * y;
};
let getSquared = getProduct.curry(2);

console.log(getDouble(3)); // 9

Before you rush to your editor to introduce this in your project know this - it may not work as-is in your JS installation. Either you need to install a package that supports currying or write one yourself.

Function.prototype.curry = function() {
  if (arguments.length < 1) return this;

  return () => {
    return this.apply(this, [...arguments].concat([...arguments]));
  };
};

let getProduct = function(x, y) {
  return x * y;
};
let getSquared = getProduct.curry(3); // 9

console.log("getSquared ", getSquared(10));

Currying is more widely used in functional programming - ergo, no one needs to blame anyone that they have not come across it for so long.

I have tried to curry a few functions in real-world applications and have failed rather spectacularly. I catch myself going back the traditional way one too many times when I hit bugs that are difficult to fix.

But, there is indeed a lot of hype to use curry complementing (or replacing?) our favourite classes. Let’s see how this holds itself in the future.