Tecnología

La programación funcional, ¿En qué consiste este paradigma?

¿Qué es la programación funcional? 

La programación funcional es un paradigma de la programación (forma en la que podemos solucionar un problema) que busca insertar el código por funciones para así facilitar la comprensión del código y acortar las líneas del mismo. 

¿Cómo funciona?

En este paradigma usamos funciones como la base de la solución, se evitan los datos mutables o transición de estados entre las mismas. En la programación funcional, tratan las funciones como “ciudadanos de primera clase”, concepto que se refiere a que estas son tratadas como argumento a otras funciones. También funcionan como entradas y salidas a otras funciones o asignarse a variables. 

En el uso del paradigma entendemos que es un paradigma declarativo, término que nos indica que no nos centraremos en el “¿cómo?” de la solución del problema sino en el “¿Qué?” queremos solucionar. La lógica de programación se expresa sin diagramas de flujo, es decir, sin ciclos o bucles.  

En este paradigma se le llama enfoque imperativo a aquel código descrito con programación funcional, en donde se estructura la función para dar solución al problema. Y a los demás se les conoce como enfoque declarativo en donde se declaran los ciclos o bucles que el programa sigue para dar solución al problema. 

Lenguajes que implementan la programación funcional.

Existen famosos lenguajes de programación que fundamentan su estructura y su sintaxis en la programación funcional como lo son: LISP, ML, Haskell, OCaml, f#, entre otros.

En las versiones más recientes de famosos lenguajes de programación como JAVA, C#, C++, PHP, Ruby, entre otros; se implementa la programación funcional pero no se fundamenta en la misma, por lo que podemos pasar de paradigma en paradigma. Generalmente de programación orientada a objetos a programación funcional. Y así obtener códigos mayoritariamente funcionales. Aprender su uso facilitaría la ya mencionada reducción de líneas de código y la legibilidad y entendimiento del mismo. 

Al facilitar la legibilidad del código para muchas personas que no tienen conocimiento de programación es fácil entender el funcionamiento del programa, quien primero se filtra y continuamente se suma. De aquí se obtiene que es funcional ya que permite el control de flujos y condiciona las funciones. 

Conceptos importantes.

Hay conceptos importantes que hay que entender a la hora de usar la programación funcional, así que haremos una corta definición y explicación de cada una de ellas: 

  • Funciones puras: funciones que siempre tendrán, tanto el mismo input como el mismo output, en donde no habrá efectos secundarios. 

Ejemplo: 

Resultado = factorial (5) 
Resultado ==125 
Resultado = factorial (5) 
Resultado ==125 

  • Composición de funciones: combinación de dos o más funciones en donde cada una de las funciones se ejecutan en frecuencia y se obtiene un resultado en concreto 

Ejemplo: 

F(x) 
G(x) 
F(g(x)) 
visualización del símbolos lambda en la programación funcional (java script)
  • Estados compartidos: es una variable objeto o espacio de memoria que se localice en un ámbito compartido como lo sería el espacio global. 

Ejemplo: 

Materia materia = new Materia (); 

Usuario usuario = new Usuario (); 

Usuario.materia = materia (); 

  • Objeto inmutable: una vez es creado no se puede modificar, también se puede entender como la constante en el código. 
  • Efecto secundario: También conocida como variable impura, es cambio de la aplicación que se puede denotar observando el código. Es decir, deja de ser una función pura y se generan efectos secundarios en el output del programa. Se evitan los efectos secundarios principalmente para tener código más fácil de comprender y probar. 

aquí hay un video que resume la información ya mencionada de la programación funcional, puede servirte de repaso ;).

Historia.

El problema que despierta el interés por el problema lógico que luego… 

Alrededor de 1900 en un congreso de matemáticas en Paris; David Hilbert propone una serie de problemas del cuál se obtiene el problema “entscheidungsproblem” o el problema de decisión el cual consiste en un reto de la lógica simbólica que busca un algoritmo que decida si una fórmula de cálculo de primer orden fuese un teorema. 

Problema que despierta la intriga de Alonzo Church y años más tarde la de Alan Turing quienes tienen la intención de encontrar una solución a la pregunta ¿se puede calcular con una maquina si una fórmula de cálculo fuese verdadero o falso? 

Desarrollarían las conclusiones, ahora, pilares de la construcción de la programación funcional. 

Alonzo Church por su parte en la búsqueda de la solución crea el cálculo lambda junto con Stephen Kleene en 1930. Este consiste en un sistema diseñado para averiguar la definición de la función, la aplicación de las funciones y la recursión de las mismas. En esta solución se encontraron conceptos importantes que trabaja la programación funcional en este momento, como las funciones dentro de funciones, o la composición de funciones y la inmutabilidad o ahora conocido como objeto inmutable en la programación funcional. 

Por otro lado, Alan Turing desarrollo la máquina de Turing que consiste en un modelo que procede una lecto/escritura de forma automática sobre una entrada, a la cual le llamo cinta y proporcionando una salida de la misma. Además de ser conocido por su definición de un conjunto infinito de estados finitos y un grupo de transiciones de los estados entre sí. 

De las dos soluciones un punto bastante interesante es el enfoque que cada uno le da al problema para encontrar la solución. En la máquina de Turing se le da mayor relevancia en el ¿cómo? Se soluciona el problema lo que ahora conoceríamos como función declarativa en la programación funcional. Mientras tanto en el cálculo de lambda se le da mayor importancia al ¿qué? Se busca solucionar en el problema lo que ahora conoceríamos como función imperativa a la hora de codificar. 

La solución de Church y Turing, aunque eran diferentes llegan a la misma conclusión siendo tal que no es posible crear aquella maquina la cual determine la veracidad de que alguna fórmula sea un teorema. Así las dos soluciones fundamentan las bases de lo que hoy conocemos como programación funcional, con mayor influencia del cálculo lambda sobre este tipo de programación. 

Importancia de la programación funcional hoy. 

La programación funcional, a pesar de que su creación y desarrollo son bastante antiguos siguen teniendo un papel muy importante en la actualidad. Esta ofrece bastantes ventajas en la codificación que terminan siendo beneficiosas para cualquier desarrollador. 

Teniendo este lenguaje abstracción basada en el concepto matemático sobre el que se resuelve en el problema. Al ser usado de forma correcta se obtiene código con mayor precisión y funcionalidad. Esto potencia en gran forma la solución de las tareas y los problemas que se presentan a la hora de programar activamente. 

Es por estas razones que los leguajes de programación que utilizan el principio de la programación funcional siguen siendo muy importantes y ocupan una basta área dentro de la tecnología. Siendo más utilizado en los problemas matemáticos y algoritmos por resolver. 

En el proceso de la especialización de las áreas en la que este se puede desarrollar, convierte este paradigma en una particularidad recurrente mente usada en los diferentes campos de la tecnología. 

Ventajas y desventajas de la programación funcional 

Ventajas Desventajas 
1. Es fácil hacer el testing en el código fuente. 
2. Las líneas de código son menos. 
3. El código se puede verificar fácilmente.
4. Son bastante compatibles con el método de paralelización. 
5. Es posible combinarlo con la programación imperativa y la programación orientada a objetos (OOP). 
1. Los datos como las variables no se pueden modificar. 
2.No es apto para cualquier tipo de tarea. 
3.La modificación y reprogramación del código da lugar a grandes errores en los programas. 
4.No es factible usarlo en las conexiones a bases de datos o a las conexiones con servidores. 
5.No da lugar a eficiente introducción de grandes sumas de datos. 

Algunos campos de desarrollo de la programación funcional son:

Actualmente la programación funcional tiene uso en varios campos del desarrollo como lo serían: 

  • Aplicaciones matemáticas 
  • Inteligencia artificial 
  • Algoritmos 
  • Compiladores 

La programación funcional y la IA

Uno de estos campos en los cuales hay una atención más importante, la tendencia de la actualidad, las IA implementan la programación funcional. Un ejemplo de un lenguaje de programación es el lenguaje Scala “lenguaje escalable” que aborda variabilidad de aplicaciones de la programación funcional combinada con la OOP, para el desarrollo del código de las IA. 

Principalmente tiene las características de inmutabilidad, funciones de orden superior y coincidencia de patrones, que aportan a las crecientes demandas de datos que escala el aprendizaje automatizado de las IA utiliza en su código fuente. 

La inmutabilidad es beneficiosa en los sistemas IA, permite revisar sobre el código el comportamiento del sistema y prevenir efectos secundarios, y aquí se aplica el fácil uso del paralelismo donde los procesos del sistema tienen accesos a estructuras de datos sin una codificación compleja que lo permita. 

Las funciones de orden superior se usan para implementar algoritmos y crear un código reutilizable. Se puede aplicar en varios procedimientos de aprendizaje automático en donde el algoritmo de optimización creado facilita la tarea. 

En la coincidencia de patrones podemos encontrar que es más sencillo para los desarrolladores depurar el código y mantenerlo, además de crear estructuras de datos complejas. Es muy útil cuando se trabajan arboles de sintaxis abstracta y representaciones gráficas, este método permite la ampliación los subsistemas de la IA y mejora el machine learning. 

Por último, la escala de aprendizaje automatizado usa el paralelismo que facilita la codificación con abstracciones para computación paralela que optimiza la IA haciendo que escalen variedad de núcleos o maquinas. Es muy usado para os modelos de aprendizaje profundo a gran escala.

Autor: Laura Rodriguez Paez

Editor: Carlos Pinzón

Código: UCPA-1

Universidad: Universidad Central

 fuentes:

codigofacilito. (2018, 5 octubre). ¿Qué es la programación funcional? [Vídeo]. YouTube. ¿Qué es la programación funcional? 
¿Qué es la programación funcional? (s. f.). Código Facilitó. https://codigofacilito.com/articulos/programacion-funcional 
Equipo editorial de IONOS. (2020). Programación funcional: ideal para algoritmos. IONOS Digital Guide. https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/programacion-funcional/ 
Frąckiewicz, M. (2023). Scala e IA: Programación funcional para sistemas de inteligencia artificial escalables. TS2 SPACE. https://ts2.space/es/scala-e-ia-programacion-funcional-para-sistemas-de-inteligencia-artificial-escalables/ 
hdeleon.net. (2022, 22 septiembre). ¿Qué es la PROGRAMACIÓN FUNCIONAL? [Vídeo]. YouTube. ¿Qué es la PROGRAMACIÓN FUNCIONAL? 
Codigo-de-programacion-de-futurista-y-grandes-conexiones-de-datos-y-modelos-de-red-ilustracion-3d-prfdh8. (s. f.). https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.alamy.es%2Fimagenes%2Fprogramaci%25C3%25B3n.html&psig=AOvVaw1tNtNV4Rv8gZNppjdO99H-&ust=1695610784521000&source=images&cd=vfe&opi=89978449&ved=0CBAQjRxqFwoTCLjD97OgwoEDFQAAAAAdAAAAABA8 

funciones-puras-e-impuras. (s. f.). https://i0.wp.com/. https://i0.wp.com/holamundo.io/wp-content/uploads/2022/12/funciones-puras-e-impuras.png?resize=1024%2C576&ssl=1 

functional.programming-70-600x339-1. (s. f.). i0.wp.com. https://i0.wp.com/www.pensemosweb.com/wp-content/uploads/2018/04/functional.programming-70-600x339-1.jpg?fit=600%2C339&ssl=1 
Lambda-sintaxis. (s. f.). ayudaexcel.com. https://ayudaexcel.com/wp-content/uploads/2022/03/Lambda-sintaxis.jpg