Escribo código JavaScript e intento utilizar su naturaleza de lenguaje funcional.¿Debo dar siempre un valor de retorno a mi función?
En otros idiomas funcionales (o incluso en Ruby), si no establezco explícitamente el valor de retorno de una función, devolverá el valor de la última expresión evaluada. JavaScript no sigue este patrón. (Para ser precisos, JavaScript siempre devuelve también un valor. Si no se configuró nada, entonces undefined
.)
Mi pregunta es la siguiente: Tengo una función que no necesita (y no) devuelve un valor . ¿Tiene sentido en un contexto de programación funcional tener una función sin valor de retorno explícito? ¿O falló en algún lugar si me encontré en este caso?
Por ejemplo, tengo la siguiente función. Comprueba periódicamente si se cambió la ubicación hash, y si es así, llama a la función dada.
LIB_hashManager = function(f, context) {
var prev = '';
var pollHash = function() {
if (prev !== window.location.hash) {
prev = window.location.hash;
f.apply(context);
}
};
window.setInterval(pollHash, 100);
};
¿Debo devolver algo aquí?
actualización
En tanto que vino a mi mente, que si en cualquier momento en el futuro voy a tener que ampliar el conocimiento de LIB_hashManager
, siguiendo el patrón constructor funcional, simplemente me puedo añadir métodos a un objeto y LIB_hashManager
devolverá ese objeto producido.
LIB_hashManager = function(f, context) {
// inside logic
// ...
};
Y más tarde se me permite escribir:
LIB_hashManager = function(f, context) {
// inside logic
// ...
// return public methods
return {
// ...
}
};
Así que no tiene sentido entonces para devolver un objeto vacío en el primer caso?
Como dijo uno de los creadores de Haskell (parafraseando) "Si toda tu máquina funcionara con un enfoque puramente funcional, entonces todo lo que obtendrías sería una caja caliente, nunca verías los resultados había calculado ". :) –