Introducción a Programación Funcional con Javascript
A continuación indico algunos conceptos principales de la programación funcional con el lenguaje de programación Javascript
La programación Funcional (FP) es un paradigma de programación con algunas técnicas particulares.
Haskell, Clojure y Scala son algunos de los más populares lenguajes de programación puramente funcionales.
La programación funcional no es un nuevo concepto, en realidad sus raíces se remontan a la década de 1930, cuando nació el calculo lamda, y ha influido en muchos lenguajes de programación, y ha estado ganando mucho impulso últimamente por lo que es el momento perfecto para aprenderlo
Funciones de primera clase
En programación funcional, las funciones son ciudadanos de primera clase.
Las funciones puede ser asignadas como variables
también una función puede ser agregado a un objecto:
como también a los arrays:
Las funciones puede ser usado como un argumento de otras funciones
Las funciones pueden retornar otras funciones
Funciones de Orden Superior
Las funciones que aceptan como argumento o retornar otras funciones son llamados Funciones de Orden Superior.
Ejemplos donde aplica esto en javascript es: Array.map(), Array.filter() and Array.reduce()
Programación Declarativa
Es posible que haya escuchado el término “programación declarativa”, ahora veremos ese punto.
Lo opuesto de lo declarativo es imperativo
Declarativo vs Imperativo
La programación imperativo es cuando le dice a la máquina (en términos generales), los pasos que debe seguir para realizar un trabajo.
La programación declarativo es cuando le dice a la máquina lo que necesita hacer y deja que descubra los detalles.
Empiezas a pensar en forma declarativa cuando tienes suficiente nivel de abstracción para dejar de razonar sobre construcciones de bajo nivel, y piensas más en un nivel de UI más alto.
HTML es declarativo, por lo que si ha estado usando HTML desde 1995, en realidad ha estado creando UI declarativas desde hace más de 20 años.
JavaScript puede adoptar un enfoque de programación imperativo y declarativo.
Por ejemplo, un enfoque de programación declarativa es evitar el uso de bucles y, en su lugar, usar construcciones de programación funcionales como map, reduce y filter, porque son más abstractos y están menos enfocados en decirle a la máquina cada paso del procesamiento.
Inmutabilidad
En la programación funcional, los datos nuncan cambian. Los datos son inmutables.
Una variable nunca se puede cambiar. Para actualizar su valor, crea una nueva variable.
En lugar de cambiar una matriz, para agregar un nuevo elemento, crea una nueva matriz concatenando la matriz anterior, más el nuevo elemento.
Un objeto nunca se actualiza, sino que se copia antes de cambiarlo.
Función pura
Una función pura, los parámetros que se le pasan por referencia nunca deben cambiar, ya que debe considerarse inmutables, pero si puede cambiar su valor de cualquier parámetro copiado a otra variable.
Una función pura es, siempre que se pase los mismos valores de los parámetros de entrada siempre retorne el mismo resultado como salida.
Transformaciones de datos
Dado que la inmutabilidad es un concepto tan importante y una base de la programación funcional, puede preguntarse cómo pueden cambiar los datos.
Simple: los datos se cambian creando copias.
Las funciones principales que hacen esto son map y reduce.
Recursividad
La recursión es un tema clave en la programación funcional. cuando una función se llama a sí misma, se llama función recursiva.
El ejemplo clásico de recursión es el cálculo de la secuencia de Fibonacci (N = (N-1 + N-2))