¿Qué es la Programación Funcional? Tutorial con ejemplo

¿Qué es la programación funcional?

La programación funcional (también llamada FP) es una forma de pensar en la construcción de software mediante la creación de funciones puras. Evita los conceptos de estado compartido y datos mutables que se observan en la programación orientada a objetos.

Los lenguajes funcionales se centran en expresiones y declaraciones en lugar de en la ejecución de declaraciones. Por lo tanto, a diferencia de otros procedimientos que dependen de un estado local o global, la salida del valor en FP 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.
  • Programación funcional Descomponer el problema en funciones.
  • Se basa en el concepto de funciones matemáticas que utiliza expresiones condicionales y recursividad para realizar el cálculo.
  • No admite iteraciones como declaraciones de bucle y declaraciones 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 funcional.
  • 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 Language)
  • A principios de los 80, el lenguaje Hope agrega tipos de datos algebraicos para la recursividad y el razonamiento ecuacional.
  • En el año 2004 Innovación del lenguaje funcional 'Scala'.

Lenguajes de programación funcionales

El objetivo de cualquier lenguaje FP es imitar las 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

Terminología básica de programación funcional y Concepts

Datos inmutables

Datos inmutables significa que debería poder crear fácilmente estructuras de datos en lugar de modificar las que ya existen.

Transparencia referencial

Los programas funcionales deben realizar operaciones como si fueran la primera vez. De esta forma, sabrás qué puede haber sucedido o no 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 mayores posibilidades de reutilización, lo que seguramente conduce a un desarrollo más rápido de los programas. Además, los módulos se pueden probar por separado, lo que le ayuda a reducir el tiempo dedicado a las pruebas y depuraciones unitarias.

Mantenibilidad

La mantenibilidad es un término simple que significa que la programación FP es más fácil de mantener, ya que no necesita preocuparse por cambiar accidentalmente nada fuera de la función dada.

función de primera clase

"Función de primera clase" es una definición atribuida a entidades de lenguajes de programación que no tienen restricciones en su uso. Por tanto, las funciones de primera clase pueden aparecer en cualquier parte del programa.

de la Brecha

El cierre es una función interna que puede acceder a variables de la función principal, incluso después de que la función principal 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 curry. Esta técnica aplica una función a sus argumentos uno a la vez, ya que 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 es eficiente si no devuelve nada. Además, ofrece la misma salida para los parámetros dados.

Ejemplo:

Function Pure(a,b)
{
	return a+b;
}

funciones impuras

Lo impuro funciona exactamente en lo opuesto a lo puro. Tienen entradas o salidas ocultas; se llama impuro. Las funciones impuras no se pueden utilizar 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

Los estados compartidos son un concepto importante en la programación orientada a objetos. Básicamente, se trata de agregar propiedades a los objetos. Por ejemplo, si un disco duro es un objeto, la capacidad de almacenamiento y el tamaño del disco se pueden agregar como propiedades.

Efectos secundarios

Los efectos secundarios son cualquier cambio de estado que ocurre fuera de una función llamada. El objetivo más importante de cualquier lenguaje de programación FP es minimizar los efectos secundarios, separándolos del resto del código del software. En la programación de FP, es vital eliminar los efectos secundarios del resto de la lógica de programación.

Los beneficios de la programación funcional

  • Le permite evitar problemas confusos y errores en el código.
  • Más fácil de probar y ejecutar pruebas unitarias y depurar código FP.
  • Procesamiento paralelo y concurrencia
  • Implementación de código activo y tolerancia a fallos
  • Ofrece una mejor 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 efectivo de Lambda Calculus

Limitaciones de la programación funcional

  • El paradigma de programación funcional no es fácil, por lo que es difícil de entender para el principiante.
  • Difícil de mantener ya que muchos objetos evolucionan durante la codificación.
  • Necesita mucha burla y una extensa configuración ambiental.
  • La reutilización es muy complicada y necesita 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 el modelo basado en programación declarativa. Sigue el modelo de programación imperativo.
En lo que se centra es: “Lo que estás haciendo. en el programa”. En lo que se centra es en "Cómo estás haciendo tu programación".
Admite programación paralela. No hay soporte para programación paralela.
Sus funciones no tienen efectos secundarios. El 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.
Admite tanto "Abstracción sobre datos" como "Abstracción sobre comportamiento". Sólo admite "Abstracción sobre datos".

Conclusión

  • La programación funcional o FP es una forma de pensar sobre la construcción de software basada en algunos principios definitorios fundamentales.
  • Los conceptos de programación funcional se centran en los resultados, no en el proceso.
  • El objetivo de cualquier lenguaje FP es imitar las funciones matemáticas.
  • Algunos lenguajes de programación funcional más destacados: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
  • 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.
  • Datos inmutables significa que debería poder crear fácilmente estructuras de datos en lugar de modificar las que ya existen.
  • Le permite evitar problemas confusos y errores en el código.
  • El código funcional no es fácil, por lo que es difícil de entender para el principiante.
  • FP usa datos inmutables mientras que OOP usa datos mutables