Day 47

Currying & Composition

12 min
JavaScript 100 Days

Currying ek function ko ek ek argument receive karne wale functions ki chain mein convert karta hai. Composition functions ko pipeline ki tarah chain karta hai — FP ka powerful combination.

Currying

Multi-argument functions ko single-argument chain mein convert karo.

currying.js
javascript
// Regular function
function add(a, b, c) { return a + b + c; }

// Curried version
function curriedAdd(a) {
  return function(b) {
    return function(c) {
      return a + b + c;
    };
  };
}

console.log(curriedAdd(1)(2)(3)); // 6

// Arrow function version
const curriedAdd2 = a => b => c => a + b + c;

// Practical: reusable functions
const multiply = x => y => x * y;
const double = multiply(2);
const triple = multiply(3);

console.log([1,2,3,4].map(double)); // [2,4,6,8]
console.log([1,2,3,4].map(triple)); // [3,6,9,12]

// Generic curry function
function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) return fn(...args);
    return (...more) => curried(...args, ...more);
  };
}

🎯 Practice Challenge

validate function banao jo curried ho: validate(rules)(data). Rules: minLength, maxLength, isEmail. Chain karo.