programación funcional, una nueva forma de resolver problemas

3
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 funcionales Entre 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 Candel Centers Technician de Everis. @jmortegac www.linkedin.com/in/jmortega1

Upload: jose-manuel-ortega-candel

Post on 05-Apr-2017

63 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Programación funcional, una nueva forma de resolver problemas

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

Page 2: Programación funcional, una nueva forma de resolver problemas

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

Page 3: Programación funcional, una nueva forma de resolver problemas

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.