Building Your Learning Module...
Getting things ready for you!
Find videos you like?
Save to resource drawer for future reference!
Currying transforms a function with multiple arguments into a sequence of functions, each taking a single argument. Named after mathematician Haskell Curry!
f(a, b, c) becomes f(a)(b)(c)// Takes all arguments at once
function add(a, b, c) {
return a + b + c;
}
console.log(add(1, 2, 3)); // 6
// Must provide all arguments
// add(1, 2) // NaN
// add(1) // NaN// Takes one argument at a time
function addCurried(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
console.log(addCurried(1)(2)(3)); // 6
// Can partially apply!
const add1 = addCurried(1);
const add1and2 = add1(2);
console.log(add1and2(3)); // 6Cleaner syntax
// Generic curry function
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
}
return function(...moreArgs) {
return curried.apply(this, args.concat(moreArgs));
};
};
}
// Use with any function
function sum(a, b, c) {
return a + b + c;
}
const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
console.log(curriedSum(1)(2, 3)); // 6
console.log(curriedSum(1, 2, 3)); // 6
// Example with more arguments
function joinStrings(a, b, c, d) {
return `${a}-${b}-${c}-${d}`;
}
const curriedJoin = curry(joinStrings);
const withDate = curriedJoin('2024')('12');
console.log(withDate('25')('log')); // 2024-12-25-logRelated but different concepts
Currying for reusable handlers
Transform f(a,b,c) → f(a)(b)(c)
Each call returns a function
Fix some arguments early
Create specialized functions
Create function factories
DRY (Don't Repeat Yourself)
a => b => c => ...
Clean, concise syntax