Currying vs. Partial Application
Been finishing up Functional JavaScript by Mike Fogus. Pretty great read. It really helps clear up the differences between currying and partial application. I've seen a few people confuse the terms, so I wanted to post a snippet here.
//Currying vs. Partial
const add = (x, y) => x + y;
const addAny = (...args) => {
return args.reduce((prev, next) => prev + next, 0);
}
// curry to specific depth
function curry(fun, x) {
return function(y) {
return fun(x, y);
}
}
// partial to any number of arguments
function partial(/* pargs */) {
const pargs = [...arguments];
const fun = pargs.shift();
return function(/* bargs */) {
const bargs = [...pargs, ...arguments];
return fun.apply(fun, bargs);
}
}
const add10 = curry(add, 10);
console.log('curry', add10(10)); // 20
const partial10 = partial(add, 10);
console.log('partial', partial10(12)); // 22
const partialAny = partial(addAny);
console.log('partialAny', partialAny(1, 2, 3, 1)); // 7Written by Amir Djavaherian
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Javascript
Authors
Did you know?
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#