Hoy en día casi todos los lenguajes de programación tienen características de programación funcional, aun cuando muchos no fueron pensados desde un inicio como programación funcional. Este es el caso de javascript, que a pesar de haber sido concebido como un lenguaje de scripting, en sus ultimas versiones ha incorporado formas de hacer programación funcional dentro de su librería estandar.
map, filter y reduce son esencialmente algunas de las funciones más conocidas, fáciles de usar y de orden superior que ejecutan la devolución de llamada proporcionada en cada elemento de una matriz.
Array.prototype.map
La función map en javascript tiene por parámetro una función que será aplicada a cada elemento del arreglo, y luego el resultado de será devuelto en un nuevo arreglo.
En el ejemplo siguiente se tiene un pen que define un arreglo de estudiantes. Un estudiante tiene dos campos que son nombre y edad, aplicamos la función que recibe map para obtener un arreglo solo con los nombres.
En matemáticas, un map se usa a menudo como sinónimo de una función, pero también puede referirse a algunas generalizaciones. Originalmente, esta era una abreviatura de mapeo, que a menudo se refiere a la acción de aplicar una función a los elementos de su dominio. Esta terminología no está completamente fija, ya que estos términos generalmente no están definidos formalmente y pueden considerarse jerga. Estos términos pueden haberse originado como una generalización del proceso de elaboración de un mapa geográfico, que consiste en mapear la superficie de la Tierra en una hoja de papel.
Los mapas pueden ser funciones o morfismos, aunque los términos comparten cierta superposición. El término mapa se puede utilizar para distinguir algunos tipos especiales de funciones, como los homomorfismos. Por ejemplo, un mapa lineal es un homomorfismo de espacios vectoriales, mientras que el término función lineal puede tener este significado así como otro. En la teoría de categorías, un mapa puede referirse a un morfismo, que es una generalización de la idea de una función. En algunas ocasiones, el término transformación también se puede usar indistintamente. También hay algunos usos menos comunes en la lógica y la teoría de grafos.
Array.prototype.filter
Similarmente la función filter, tiene como parámetro una función que discrimina los elementos del arreglo al que esta siendo aplicada. esto es si el elemento del arreglo cumple con la condición dicho elemento será parte de la colección resultante.
Supongamos que tenemos un sistema que te deja crear tu propia hamburguesa a partir de una lista de ingredientes. Tenemos 2 listas, la lista de ingredientes disponibles, y la lista de ingredientes que no queremos.
La función filter nos ayuda a revisar que la lista de ingredientes que no queremos sean removidos de la lista de ingredientes disponibles, y nos da como resultado una lista nueva, con los ingredientes que nos gustan únicamente.
En este caso, quitamos los pepinillos y la cebolla y resulta una lista filtrada que no tiene estos elementos.
En matemáticas, un filtro es un subconjunto especial de un conjunto parcialmente ordenado. Los filtros aparecen en orden y teoría de celosía, pero también se pueden encontrar en la topología, de donde se originan. La noción dual de filtro es un ideal de orden.
Los filtros fueron introducidos por Henri Cartan en 1937 y posteriormente utilizados por Bourbaki en su libro Topologie Générale como una alternativa a la noción similar de red desarrollada en 1922 por E. H. Moore y H. L. Smith.
Array.prototype.reduce
La función reduce como ya se imaginaran funciona de manera similar a filter y map, con la diferencia fundamental de que el resultado de una función reduce es la única en este tridente que tiene como resultado un valor escalar y no vectorial, es decir no regresa un arreglo si no que un valor o un objeto. Ademas la función que recibe también es diferente ya que la función reductora necesita un parámetro acumulador y el valor en cuestión.
Si tomamos nuestro ejemplo anterior, la función filter nos devuelve un arreglo de ingredientes. Si aplicamos la función reduce podríamos obtener como resultado un string con los ingredientes que necesitamos. Abstractamente hablando, la hamburguesa ya preparada 🙂
En matemáticas, la reducción se refiere a la reescritura de una expresión en una forma más simple. Por ejemplo, el proceso de reescribir una fracción en una con el denominador de número entero más pequeño posible (manteniendo el numerador como un número entero) se llama “reducir una fracción”. Reescribir una expresión radical (o “raíz”) con el número entero más pequeño posible debajo del símbolo de radical se denomina “reducir un radical”. Minimizar el número de radicales que aparecen debajo de otros radicales en una expresión se denomina radicales desestimulantes.
Es en esta motivación quizás que esta función fue nombrada como reduce.
Conclusión
Este tridente de funciones puede ser usado en conjunto para el tratamiento de los datos. Supongamos el ejemplo de la hamburguesa:
- Map: preparar los ingredientes (sacarlos de su empaque o pelarlos)
- Filter: quitar de la lista los ingredientes que no vamos a necesitar
- Reduce: reúne todos los ingredientes en una sola hamburguesa.