Programación funcional - Introducción

Los lenguajes de programación funcional están especialmente diseñados para manejar aplicaciones de procesamiento de listas y cálculos simbólicos. La programación funcional se basa en funciones matemáticas. Algunos de los lenguajes de programación funcional populares incluyen: Lisp, Python, Erlang, Haskell, Clojure, etc.

Los lenguajes de programación funcional se clasifican en dos grupos, es decir:

  • Pure Functional Languages- Estos tipos de lenguajes funcionales solo admiten los paradigmas funcionales. Por ejemplo, Haskell.

  • Impure Functional Languages- Estos tipos de lenguajes funcionales apoyan los paradigmas funcionales y la programación de estilo imperativo. Por ejemplo, LISP.

Programación funcional: características

Las características más destacadas de la programación funcional son las siguientes:

  • Los lenguajes de programación funcional están diseñados sobre el concepto de funciones matemáticas que utilizan expresiones condicionales y recursividad para realizar cálculos.

  • Soportes de programación funcional higher-order functions y lazy evaluation caracteristicas.

  • Los lenguajes de programación funcional no admiten controles de flujo como declaraciones de bucle y declaraciones condicionales como If-Else y Switch Statements. Utilizan directamente las funciones y llamadas funcionales.

  • Al igual que OOP, los lenguajes de programación funcional admiten conceptos populares como abstracción, encapsulación, herencia y polimorfismo.

Programación funcional: ventajas

La programación funcional ofrece las siguientes ventajas:

  • Bugs-Free Code - La programación funcional no admite state, por lo que no hay resultados de efectos secundarios y podemos escribir códigos sin errores.

  • Efficient Parallel Programming- Los lenguajes de programación funcional NO tienen estado mutable, por lo que no hay problemas de cambio de estado. Se pueden programar "Funciones" para que funcionen en paralelo como "instrucciones". Dichos códigos admiten una fácil reutilización y prueba.

  • Efficiency- Los programas funcionales constan de unidades independientes que pueden ejecutarse simultáneamente. Como resultado, estos programas son más eficientes.

  • Supports Nested Functions - La programación funcional admite funciones anidadas.

  • Lazy Evaluation - La programación funcional admite construcciones funcionales perezosas como listas perezosas, mapas perezosos, etc.

Como desventaja, la programación funcional requiere un gran espacio de memoria. Como no tiene estado, es necesario crear nuevos objetos cada vez para realizar acciones.

La programación funcional se utiliza en situaciones en las que tenemos que realizar muchas operaciones diferentes en el mismo conjunto de datos.

  • Lisp se utiliza para aplicaciones de inteligencia artificial como aprendizaje automático, procesamiento del lenguaje, modelado del habla y la visión, etc.

  • Los intérpretes de Lisp embebidos agregan programabilidad a algunos sistemas como Emacs.

Programación funcional frente a programación orientada a objetos

La siguiente tabla destaca las principales diferencias entre la programación funcional y la programación orientada a objetos:

Programación funcional OOP
Utiliza datos inmutables. Utiliza datos mutables.
Sigue el modelo de programación declarativa. Sigue el modelo de programación imperativo.
El foco está en: "Lo que estás haciendo" El enfoque está en "Cómo estás"
Admite programación en paralelo No apto para programación en paralelo
Sus funciones no tienen efectos secundarios. Sus métodos pueden producir efectos secundarios graves.
El control de flujo se realiza mediante llamadas a funciones y llamadas a funciones con recursividad El control de flujo se realiza mediante lazos y declaraciones condicionales.
Utiliza el concepto de "recursividad" para iterar los datos de recopilación. Utiliza el concepto de "bucle" para iterar los datos de la colección. Por ejemplo: For-each loop en Java
El orden de ejecución de las declaraciones no es tan importante. El orden de ejecución de las declaraciones es muy importante.
Admite tanto "Abstracción sobre datos" como "Abstracción sobre comportamiento". Solo admite "abstracción sobre datos".

Eficiencia de un código de programa

La eficiencia de un código de programación es directamente proporcional a la eficiencia algorítmica y la velocidad de ejecución. La buena eficiencia asegura un mayor rendimiento.

Los factores que afectan la eficiencia de un programa incluyen:

  • La velocidad de la maquina
  • Velocidad del compilador
  • Sistema operativo
  • Elegir el lenguaje de programación correcto
  • La forma en que se organizan los datos en un programa
  • Algoritmo utilizado para resolver el problema.

La eficiencia de un lenguaje de programación se puede mejorar realizando las siguientes tareas:

  • Eliminando el código innecesario o el código que pasa al procesamiento redundante.

  • Haciendo uso de memoria óptima y almacenamiento no volátil

  • Haciendo uso de componentes reutilizables donde corresponda.

  • Haciendo uso del manejo de errores y excepciones en todas las capas del programa.

  • Creando código de programación que asegure la integridad y consistencia de los datos.

  • Desarrollando el código del programa que cumpla con la lógica y el flujo del diseño.

Un código de programación eficiente puede reducir el consumo de recursos y el tiempo de finalización tanto como sea posible con un riesgo mínimo para el entorno operativo.