lunes, 23 de octubre de 2017

La programación funcional llega a Android

Con la llegada de Kotlin a Android, llego la programación funcional. Si bien java 8 tiene varios aspectos funcionales, no se compara con Kotlin que nos acerca mucho más a la programación funcional en serio.

Seguramente, la programación que ya conoces y utilizas cada día consiste en ejecutar líneas de código, una detrás de la otra, decidir el flujo con bucles y condicionales, y jugar con variables. Si eres un programador OOP, a esto le añadimos que todo esto lo “empaquetamos” en lo que llamamos clases, y luego jugamos con esas clases.

Pero hay formas muy distintas de hacer las cosas. Una de ellas es precisamente la programación funcional, de la que seguro que has oído hablar mucho últimamente.

variables, bucles, constantes, clases, funciones... seguramente te parezcan la forma única de programar, o al menos así se ha enseñado en muchos sitios. Sin embargo, hay formas distintas de programar, que te permitirá resolver problemas mucho más avanzadas que con el estilo de programación que ya conoces.

El tipo de programación que utilizas todos los días, es decir, el código que utiliza variables, bucles, clases, etc. es conocido como Programación Imperativa. Los lenguajes de programación más populares pertenecen a este tipo: C/C++, Java, Python, PHP...

Y por si te lo estás preguntando... sí, la Programación Orientada a Objetos (OOP) pertenece a esta categoría, digamos que es una "subcategoría" de la Programación Imperativa.

Por otro lado, tenemos la Programación Funcional, que es un paradigma que no necesita ni variables, ni bucles, ni nada de lo anterior para programar. Utiliza unas herramientas distintas: principalmente funciones y pensar de forma distinta a la hora de escribir tu código.

Y si programar se trata de dar soluciones a distintos problemas, ¿por qué utilizamos siempre el mismo paradigma para resolver todos los problemas? ¿No tendría más sentido usar el estilo que mejor resuelva cada problema?

Así que, si somos programadores imperativos, no es porque en algún momento hayamos elegido el mejor camino, sino porque en aquellos años el estilo funcional no era viable, y a partir de ahí, cayó en desuso y se olvidó. Hasta ahora...

El lenguaje de Kotlin puede parecer a primera vista nada más que una versión mejorada de Java: muchos aspectos de sintaxis, algunos tipos de inferencia, etc. Pero si profundizamos un poco más y descubriremos que muchas de las características más populares y avanzadas de los lenguajes funcionales están disponibles. Como por ejemplo: 
  • Tipos de datos algebraicos
  • Inmutables
  • funciones recurcivas 
  • funciones como: Mapping, filtering, reducing etc
  • Currying
  • Lazyness
Para que no quede tan largo el post, continuara...