Недавно я прочитал о составе функции в Javascript книге, а затем на веб-сайте я видел, как кто-то ссылается на нее как на карри.Являются ли «каррирование» и «композиция» одной и той же концепцией в Javascript?
Являются ли они одинаковыми понятиями?
Недавно я прочитал о составе функции в Javascript книге, а затем на веб-сайте я видел, как кто-то ссылается на нее как на карри.Являются ли «каррирование» и «композиция» одной и той же концепцией в Javascript?
Являются ли они одинаковыми понятиями?
@ ответ Omarjmh это хорошо, но сочинять пример в подавляющем большинстве случаев сложны для обучающегося, на мой взгляд
Являются ли они одинаковыми понятиями?
Номер
Во-первых, карринг переводит функцию, которая принимает несколько аргументов в последовательность функций, каждая принимает один аргумент.
// not curried
const add = (x,y) => x + y;
add(2,3); // => 5
// curried
const add = x => y => x + y;
add(2)(3); // => 5
Обратите внимание на то, каким образом применяется каррическая функция, по одному аргументу за раз.
Во-вторых, состав функций представляет собой комбинацию двух функций в одну, которая при применении возвращает результат цепных функций.
const compose = f => g => x => f(g(x));
compose (x => x * 4) (x => x + 3) (2);
// (2 + 3) * 4
// => 20
Эти два понятия тесно связаны между собой, поскольку они хорошо играют друг с другом. Состав общей функции работает с унарными функциями (функциями, которые принимают один аргумент), а в карриных функциях также принимается только один аргумент (для каждого приложения).
// curried add function
const add = x => y => y + x;
// curried multiplication function
const mult = x => y => y * x;
// create a composition
// notice we only apply 2 of comp's 3 parameters
// notice we only apply 1 of mult's 2 parameters
// notice we only apply 1 of add's 2 parameters
let add10ThenMultiplyBy3 = compose (mult(3)) (add(10));
// apply the composition to 4
add10ThenMultiplyBy3(4); //=> 42
// apply the composition to 5
add10ThenMultiplyBy3(5); //=> 45
Вы очень правы, я отредактирую его позже сегодня, спасибо – JordanHendrix
Композиция и карри используются для создания функций. Состав и карри отличаются друг от друга тем, как они создают новые функции (применяя args vs chaining).
Compose:
Compose должен возвращать функцию, состав списка функций произвольной длины. Каждая функция вызывается для возвращаемого значения следующей функции. Вы можете думать о том, чтобы сочинять как движущееся право налево через свои аргументы.
Пример:
var compose = function(funcs) {
funcs = Array.prototype.slice.call(arguments, 0);
return function(arg) {
return funcs.reduceRight(function (a, b) {
a = a === null ? a = b(arg) : a = b(a);
return a;
}, null);
};
};
var sayHi = function(name){ return 'hi: ' + name;};
var makeLouder = function(statement) { return statement.toUpperCase() + '!';};
var hello = compose(sayHi, makeLouder);
l(hello('Johhny')); //=> 'hi: JOHNNY!'
Каррирование:
Каррирование представляет собой способ построения функций, что позволяет частичного применения аргументов функции.
Пример:
var addOne = add(1);
var addTwo = add(2);
var addOneToFive = addOne(5);
var addTwoToFive = addTwo(5);
l(addOneToFive); //6
l(addTwoToFive); //7
JSBin с вышеприведенными примерами: https://jsbin.com/jibuje/edit?js,console
они связаны понятиями, но не совсем то же самое. сочинять - сделать два в одном, карри - предварительно определить часть единицы. – dandavis
@ dandavis можете ли вы опубликовать ответ, в котором изложены различия? Могут ли они использоваться для достижения одной и той же цели? –
было хорошо объяснено уже в достаточном количестве мест, что я не смог бы оправдать это. но вкратце: они не то же самое, поэтому изучайте каждого и выясняйте, что каждый из них означает и делает, чтобы выяснить, как они применяются друг к другу, если они это сделают. – dandavis