programación funcional, una nueva forma de resolver problemas
TRANSCRIPT
4 www.coiicv.org
Bit@cora Febrero 2016
La programación funcional es un paradigma de programación que trata la computación como la evaluación de funciones donde las variables no tienen estado y son inmuta-bles. Básicamente, consiste en programar con funciones puras, es decir funciones que reciben valores de entrada, devuelven valo-res de salida y no tienen efectos colaterales.
A diferencia de otros paradigmas, la progra-mación funcional elige prescindir de datos de estado o mutables para centrarse en la resolución de problemas mediante mecanis-mos puramente matemáticos. Este concepto choca principalmente con las bases de los paradigmas imperativos, ya que éstos se basan en la aplicación de dichos estados y de sus cambios para la automatización a la hora de resolver una operación.
El paradigma funcional enfatiza la utilización de funciones puras o de orden superior, es decir, funciones que no tengan efectos se-cundarios que no manejan datos mutables o de estado. Una de las buenas prácticas que hace al estilo funcional es siempre tratar de evitar los efectos secundarios, es decir, evi-tar que las funciones modifiquen los valores de sus parámetros.
Lenguajes funcionalesEntre los lenguajes que implementan la programación funcional podemos destacar: Java 8, Groovy, Swift, Scala, Clojure.
Uno de los nuevos componentes más im-portantes de la versión 8 de Java es el so-porte para el uso de expresiones lambda mediante funciones anónimas o closures. El objetivo de estas expresiones es hacer que Java como lenguaje orientado a objetos ad-quiera también capacidades funcionales. Una de las características más importantes de las expresiones lambda es que permite pasar funciones como parámetros de otras funciones. Algunas de las mejoras más in-teresantes son la posibilidad de dejar de escribir clases anónimas y la simplificación de iteraciones y operaciones sobre listas y colecciones de datos.
En Java 8 podemos destacar también el Stream API, que presenta algunas carac-terísticas novedosas como la creación de streams que permiten el procesamiento de datos en paralelo mejorando la performan-ce de una manera simple y transparente.Groovy es un lenguaje orientado a objetos, dinámico y 100% interoperable con Java.
Programación funcional, una nueva forma de resolver problemas.
José Manuel Ortega CandelCenters Technician de Everis.
@jmortegacwww.linkedin.com/in/jmortega1
5www.coiicv.org
Bit@cora Enero 2016
elementos de primer nivel o de orden supe-rior y se enfatiza la iteración recursiva en lugar de los bucles con variables que cam-bian de estado.
Existen otros lenguajes que no son pura-mente funcionales, pero con los cuales se pueden experimentar técnicas de progra-mación funcional como JavaScript o Python. Ambos son lenguajes interpretados multi-paradigma, con tipos dinámicos, que per-miten pasar funciones como parámetro.
Ventajas que aporta la programación funcional:
• Los programas escritos en un estilo fun-cional son más fáciles de testear y de-purar.
• Al utilizar programación funcional las líneas de código se reducen y nues-tro programa es mucho más simple de comprender.
• Por su característica modular, facilita la computación concurrente y paralela; permitiéndonos obtener muchas de las ventajas de los procesadores multihilo.
• El estilo funcional trabaja muy bien con grande colecciones de datos, permitién-donos crear algoritmos y programas más expresivos.
• Ofrece también una serie de ventajas productivas a la hora del mantenimien-to del código, entre ellas encontramos que éste suele ser más sencillo de com-prender y por lo tanto, puede extender-se y/o modificarse con mayor facilidad.
• Favorece pequeños bloques de ejecución
• Reusabilidad y extensibilidad
Las ventajas de Groovy es que simplifica mucho la sintaxis y verbosidad de Java has-ta lo realmente necesario para expresar lo que queremos hacer.
Swift, es un lenguaje creado por Apple con el objetivo de sustituir a Objective-C como len-guaje principal para el desarrollo de aplicacio-nes, tanto para iOS como para Mac OS X.
Uno de los lenguajes que mayor empujón le ha dado a la programación funcional es Scala. Se puede considerar hoy en día que es el más potente para programación fun-cional por varios motivos:
• Trata de combinar lo mejor de la pro-gramación funcional con lo mejor de la orientación a objetos.
• Es un lenguaje de programación mul-ti-paradigma que se ejecuta sobre la JVM, e incorpora características de pro-gramación orientada a objetos, funcio-nal y concurrente. Soporta tanto plata-formas Java como CLR para .NET.
• Es completamente interoperable con sus plataformas: por ejemplo, puedes llamar a código Java desde Scala y vi-ceversa.
• Ofrece soporte para programación con-currente a través de la librería Akka
• Los programas en Scala son más cortos y mantenibles si los comparamos con sus homólogos en Java. En muchos as-pectos Scala se parece a otros lengua-jes como Python aunque incluye una mayor cantidad de características fun-cionales de serie, sin recurrir a librerías de terceros.
Clojure es un lenguaje puro de programa-ción funcional orientado a la programación multi-hilo. Proporciona un conjunto de ele-mentos inmutables como listas, vectores, conjuntos y mapas donde las funciones son
6 www.coiicv.org
Bit@cora Febrero 2016
ConclusionesLa programación funcional es un paradig-ma de programación cuyo objetivo es crear programas más cortos, fáciles de entender y eficientes sobre hardware multihilo, en el que se incide especialmente en el uso de funciones y de estructuras de datos in-mutables. En principio, podría parecer que esto no aporta mucho en comparación con el actual modelo de programación imperati-va, pero cuando tenemos que trabajar con procesos y tareas en paralelo que tienen que interactuar entre sí, esto es una venta-ja muy notable.
Personalmente creo que es importante aprender algo de programación funcional porque de alguna forma cambia la pers-pectiva que uno tiene de los programas y sobretodo da una nueva visión de pen-sar y resolver los problemas. Al fin y al cabo, la programación funcional es más una forma de pensamiento y de resolver problemas que un conjunto particular de herramientas y lenguajes.