¿Qué es la programación funcional?
⚡ Resumen inteligente
La programación funcional es una forma de construir software mediante la composición de funciones puras, evitando el estado compartido y los datos mutables. Enfatiza las expresiones sobre las sentencias, por lo que la salida de una función depende únicamente de sus entradas, lo que hace que los programas sean predecibles y comprobables.

¿Qué es la programación funcional?
La programación funcional (también llamada PF) es una forma de concebir la construcción de software mediante la creación de funciones puras. Evita los conceptos de estado compartido y datos mutables propios de la programación orientada a objetos.
Los lenguajes funcionales hacen hincapié en las expresiones y declaraciones, en lugar de en la ejecución de instrucciones. Por lo tanto, a diferencia de otros procedimientos que dependen de un estado local o global, el valor de salida en la programación funcional depende únicamente de los argumentos pasados a la función.
Características de la programación funcional
- El método de programación funcional se centra en los resultados, no en el proceso.
- Se hace hincapié en lo que se va a calcular.
- Los datos son inmutables.
- La programación funcional descompone el problema en funciones.
- Se basa en el concepto de funciones matemáticas que utilizan expresiones condicionales y recursión para realizar el cálculo.
- No admite iteraciones como bucles ni sentencias condicionales como If-Else.
Historia de la programación funcional
- La base de la programación funcional es el cálculo lambda. Fue desarrollado en la década de 1930 para la aplicación, definición y recursión de funciones.
- LISP fue el primer lenguaje de programación funcional. McCarthy lo diseñó en 1960.
- A finales de los años 70, investigadores de la Universidad de Edimburgo definieron el ML (Meta Lenguaje).
- A principios de los años 80, el lenguaje Hope añadió tipos de datos algebraicos para la recursión y el razonamiento ecuacional.
- En el año 2004 se creó el lenguaje funcional 'Scala'.
Lenguajes de programación funcionales
El objetivo de cualquier lenguaje de programación funcional es imitar funciones matemáticas. Sin embargo, el proceso básico de cálculo es diferente en la programación funcional.
Estos son algunos de los lenguajes de programación funcional más destacados:
- Haskell
- SML
- Clojure
- Scala
- Erlang
- Fácil
- F#
- ML/OCaml Lisp/Esquema
- XSLT
- SQL
- Mathematica
Terminología básica de programación funcional y Concepts
Datos inmutables
Los datos inmutables significan que debería ser fácil crear estructuras de datos en lugar de modificar las que ya existen.
Transparencia referencial
Los programas funcionales deben ejecutar las operaciones como si fuera la primera vez. De esta forma, se sabrá qué pudo haber ocurrido durante la ejecución del programa y sus efectos secundarios. En términos de programación funcional, esto se denomina transparencia referencial.
Modularidad
El diseño modular aumenta la productividad. Los módulos pequeños se pueden codificar rápidamente y tienen mayor probabilidad de reutilizarse, lo que sin duda acelera el desarrollo de programas. Además, los módulos se pueden probar por separado, lo que ayuda a reducir el tiempo dedicado a las pruebas unitarias y la depuración.
Mantenibilidad
La mantenibilidad es un término sencillo que significa que la programación funcional es más fácil de mantener, ya que no es necesario preocuparse por cambiar accidentalmente nada fuera de la función dada.
función de primera clase
El término "función de primera clase" se refiere a entidades de un lenguaje de programación que no tienen restricciones en su uso. Por lo tanto, las funciones de primera clase pueden aparecer en cualquier parte del programa.
de la Brecha
Un cierre es una función interna que puede acceder a las variables de la función principal, incluso después de que esta última se haya ejecutado.
Funciones de orden superior
Las funciones de orden superior toman otras funciones como argumentos o las devuelven como resultados.
Las funciones de orden superior permiten aplicaciones parciales o currificación. Esta técnica aplica una función a sus argumentos uno a uno, y cada aplicación devuelve una nueva función que acepta el siguiente argumento.
Función pura
Una "función pura" es una función cuyas entradas se declaran como entradas y ninguna de ellas debe estar oculta. Las salidas también se declaran como salidas.
Las funciones puras actúan sobre sus parámetros. No son eficientes si no devuelven ningún valor. Además, ofrecen el mismo resultado para los parámetros dados.
Ejemplo:
Function Pure(a,b) { return a+b; }
funciones impuras
Las funciones impuras son exactamente lo opuesto a las funciones puras. Tienen entradas o salidas ocultas, y por eso se llaman impuras. Las funciones impuras no se pueden usar ni probar de forma aislada, ya que tienen dependencias.
Ejemplo
int z; function notPure(){ z = z+10; }
Composición de la función
La composición de funciones consiste en combinar 2 o más funciones para crear una nueva.
Estados compartidos
El estado compartido es un concepto importante en la programación orientada a objetos. Básicamente, consiste en añadir propiedades a los objetos. Por ejemplo, si un disco duro es un objeto, se le pueden añadir como propiedades la capacidad de almacenamiento y el tamaño del disco.
Efectos secundarios
Los efectos secundarios son cualquier cambio de estado que ocurre fuera de la función llamada. El principal objetivo de cualquier lenguaje de programación funcional es minimizar los efectos secundarios separándolos del resto del código. En la programación funcional, es fundamental aislar los efectos secundarios del resto de la lógica de programación.
Los beneficios de la programación funcional
- Te permite evitar problemas y errores confusos en el código.
- Más fácil de probar y ejecutar. Pruebas unitarias y depuración de FP. Code.
- Procesamiento paralelo y concurrencia.
- Implementación de código en caliente y tolerancia a fallos.
- Ofrece una mayor modularidad con un código más corto.
- Mayor productividad del desarrollador.
- Admite funciones anidadas.
- Construcciones funcionales como Lazy Map & Lists, etc.
- Permite el uso eficaz del cálculo lambda.
Limitaciones de la programación funcional
- El paradigma de la programación funcional no es fácil, por lo que resulta difícil de entender para los principiantes.
- Resulta difícil de mantener, ya que muchos objetos evolucionan durante la codificación.
- Necesita muchas burlas y una configuración ambiental extensa.
- La reutilización es muy complicada y requiere una refactorización constante.
- Es posible que los objetos no representen el problema correctamente.
Programación funcional versus programación orientada a objetos
| Programacion Funcional | programación orientada a objetos |
|---|---|
| FP utiliza datos inmutables. | La programación orientada a objetos utiliza datos mutables. |
| Sigue un modelo basado en programación declarativa. | Sigue un modelo de programación imperativo. |
| En lo que se centra es en: “Lo que estás haciendo en el programa”. | En lo que se centra es en: “Cómo estás realizando tu programación”. |
| Admite programación paralela. | No se admite la programación paralela. |
| Sus funciones no tienen efectos secundarios. | Un método puede producir muchos efectos secundarios. |
| El control de flujo se realiza mediante llamadas a funciones y llamadas a funciones con recursividad. | El proceso de control de flujo se lleva a cabo mediante bucles y declaraciones condicionales. |
| El orden de ejecución de las declaraciones no es muy importante. | El orden de ejecución de las declaraciones es importante. |
| Apoya tanto “Abstracción sobre datos” y “Abstrac"La acción sobre el comportamiento." | Solo admite “Abstracción sobre Datos”. |

