tipos - Composición de funciones en JavaScript
que engorda mas el vino o la cerveza (1)
¿Cuál es el beneficio de la implementación de la composición de funciones en libs como guión bajo, lo-dash y otros, similar a este:
var compose = function() {
var funcs = arguments;
return function() {
var args = arguments;
for (var i = funcs.length; i --> 0;) {
args = [funcs[i].apply(this, args)];
}
return args[0];
}
};
var c = compose(trim, capitalize);
en comparación con esto:
var c = function (x) { return capitalize(trim(x)); };
Este último es mucho más eficiente.
Por un lado, es más fácil de leer. El rendimiento rara vez es más importante que eso. Además, podría hacer una función de arity 2 dedicada con casi el mismo rendimiento.
El otro beneficio es que la composición se puede cambiar fácilmente en tiempo de ejecución. Puede crear versiones que recortan antes de mayúsculas, capitalizar antes de recortar, recortar solamente, solo capitalizar, o ninguna, sin tener que especificar explícitamente cada combinación en el código. Esto puede simplificar en gran medida su código a veces. La composición en tiempo de ejecución es una de esas cosas que nunca pensaste que siempre quisiste.
Por ejemplo:
var c = function(x) {return x;} // identity
var onTrimClick = function() {c = compose(c, trim);}
var onCapitalizeClick = function() {c = compose(c, capitalize);}
var onSomethingElseClick = function() {c = compose(c, somethingElse);}
Esto le permite crear una función compuesta c
en tiempo de ejecución en función de lo que haga clic en el usuario y en qué orden.