Paradigma de programación
funcional
Bienvenido a esta presentación que explora el fascinante mundo de la
programación funcional. Acompáñenos en un viaje a través de su historia,
conceptos básicos y aplicaciones en el desarrollo de software.
por Angela Maria Correa
Historia del paradigma funcional
Orígenes Primeros lenguajes
El paradigma funcional tiene sus raíces en los trabajos pioneros Lisp (1958) fue uno de los primeros lenguajes de programación
de Alonzo Church y Alan Turing en la década de 1930. Sus funcional. Sus características innovadoras, como la
estudios sobre funciones matemáticas sentaron las bases para recursividad y la manipulación de listas, sentaron las bases
la programación funcional. para el desarrollo de lenguajes funcionales modernos.
Características del paradigma
funcional
Funciones como entidades Inmutabilidad
de primera clase Los datos son inmutables, lo que
significa que no pueden ser
Las funciones pueden ser pasadas modificados una vez creados. Se
como argumentos, retornadas como crean nuevas versiones de los datos
valores y asignadas a variables. en lugar de modificar los existentes.
Efectos secundarios mínimos Recursividad
Las funciones se definen
Las funciones ideales no tienen recursivamente, donde una función
efectos secundarios, lo que facilita la se llama a sí misma para resolver
depuración y el razonamiento sobre problemas de forma iterativa.
el comportamiento del código.
Principios básicos: funciones
puras, inmutabilidad,
composición
1 Funciones Puras 2 Inmutabilidad
Las funciones puras siempre Los datos no cambian una vez
producen el mismo resultado creados. Se crean nuevas
para la misma entrada, sin versiones de los datos en lugar
efectos secundarios. de modificar los existentes.
3 Composición
Combinar funciones simples para crear funciones más complejas,
utilizando técnicas como la composición de funciones.
Ventajas del paradigma funcional
Código más legible y Depuración simplificada Paralelismo y concurrencia
mantenible
La ausencia de efectos secundarios y la
El código funcional tiende a ser más inmutabilidad hacen que la depuración La programación funcional se presta
conciso y fácil de entender, facilitando de errores sea más sencilla. bien para el paralelismo y la
su mantenimiento y reutilización. concurrencia debido a la naturaleza sin
efectos secundarios de las funciones.
Desventajas del paradigma
funcional
Curva de aprendizaje Rendimiento
El paradigma funcional puede ser En algunos casos, el rendimiento de los
desafiante para los programadores programas funcionales puede ser menor
acostumbrados a la programación que el de los programas imperativos.
imperativa.
Complejidad
La naturaleza recursiva de la
programación funcional puede generar
código complejo para problemas simples.
Diferencias entre
programación funcional y
programación imperativa
1 Programación Imperativa
Se enfoca en cómo hacer las cosas, describiendo pasos
secuenciales para modificar el estado del programa.
2 Programación Funcional
Se enfoca en qué se debe hacer, definiendo funciones que
transforman datos sin modificar el estado del programa.
Conceptos clave: funciones de primer orden, closures,
currying
Funciones de primer orden Closures Currying
Son funciones que pueden ser pasadas como Las funciones pueden acceder a variables del Transformar una función que toma múltiples
argumentos o retornadas como valores. entorno donde fueron definidas, incluso argumentos en una serie de funciones que
después de que la función que las creó haya toman un solo argumento.
terminado de ejecutarse.
Recursividad en la programación funcional
Recursividad
1 Una función que se llama a sí misma para resolver problemas de forma iterativa.
Caso base
2
Condición de parada que detiene la recursión.
Caso recursivo
3 Parte de la función que se llama a sí misma con una entrada
modificada.
Ejemplos de recursividad: factorial, fibonacci,
quicksort
Factorial
1
Calcula el producto de todos los enteros positivos hasta un número dado.
Fibonacci
2
Genera una secuencia donde cada número es la suma de los dos anteriores.
Quicksort
3 Algoritmo de ordenamiento que divide una lista en dos
sublistas y las ordena recursivamente.
Manejo de la recursividad:
caso base y caso recursivo
1 2
Caso base Caso recursivo
Condición de parada que evita la Llamada a la función con una
recursión infinita. entrada modificada para acercar la
solución al caso base.
Aplicaciones de la recursividad
Procesamiento de datos Resolución de problemas
La recursión es ideal para procesar estructuras de datos La recursión permite dividir problemas complejos en
complejas como árboles y listas. subproblemas más simples hasta encontrar la solución.
Lenguajes de programación funcional: Lisp, Haskell,
Erlang, Clojure
Características de los lenguajes funcionales
Funciones puras Inmutabilidad Recursión
Las funciones no tienen efectos Los datos no pueden ser modificados Las funciones se definen
secundarios y producen el mismo una vez creados. Se crean nuevas recursivamente, lo que permite resolver
resultado para la misma entrada. versiones de los datos en lugar de problemas de forma iterativa.
modificar los existentes.
Comparación de lenguajes
funcionales
Lenguaje Características Ejemplos de uso
Lisp Antiguo y flexible, gran Inteligencia artificial,
ecosistema. procesamiento de lenguaje
natural.
Haskell Estricto y tipo-seguro, Computación científica,
ideal para investigación. desarrollo de sistemas
robustos.
Erlang Diseñado para la Desarrollo de sistemas
concurrencia y tolerancia a distribuidos,
fallas. telecomunicaciones.
Clojure Corre sobre la JVM, Desarrollo web, análisis de
combina programación datos.
funcional y orientada a
objetos.
Frameworks y bibliotecas funcionales en otros
lenguajes
JavaScript Python Java
Bibliotecas como Ramda, Lodash y Librerías como Functools, itertools Bibliotecas como Vavr, Javaslang y
[Link] permiten utilizar y Cytoolz proporcionan funciones Stream API permiten utilizar
conceptos funcionales en de orden superior y técnicas de conceptos funcionales en Java.
JavaScript. programación funcional.
Integración del paradigma funcional
en la programación orientada a
objetos
1 Enfoque mixto
Combinar la estructura y organización de la programación orientada a objetos
con las ventajas de la programación funcional.
2 Diseño de clases
Utilizar funciones puras y principios de inmutabilidad dentro de las clases.
3 Implementación de métodos
Implementar métodos con un enfoque funcional, utilizando funciones de orden
superior y recursividad.
Buenas prácticas en
programación funcional
Inmutabilidad Funciones puras
Evitar la modificación de los Evitar los efectos secundarios y
datos, creando nuevas versiones asegurar que las funciones
en lugar de modificar los siempre produzcan el mismo
existentes. resultado para la misma
entrada.
Composición Recursión
Combinar funciones simples Utilizar la recursión para
para crear funciones más resolver problemas de forma
complejas. iterativa.
Desafíos y limitaciones del
paradigma funcional
Curva de aprendizaje
El paradigma funcional puede ser difícil de aprender para
programadores acostumbrados a la programación imperativa.
Rendimiento
En algunos casos, los programas funcionales pueden tener un
rendimiento menor que los programas imperativos.
Complejidad
La naturaleza recursiva de la programación funcional puede generar
código complejo para problemas simples.
Futuro de la programación
funcional
El paradigma funcional está en constante evolución, con nuevas ideas y
aplicaciones surgiendo constantemente. Su enfoque en la modularidad, la
legibilidad y la eficiencia lo convierte en un enfoque prometedor para el
desarrollo de software en el futuro.