Últimamente se está oyendo hablar cada vez más de Kotlin en el entorno de la JVM. Los desarrolladores Java y sobre todos los desarrolladores Android están entusiasmados con este nuevo lenguaje que promete ser una revolución para ellos.
Pero, ¿qué supone Kotlin realmente para un desarrollador Groovy? En GenbetaDev ya hemos hablado anteriormente tanto de Kotlin como de Groovy, así que si quereis conocer más en detalle ambos lenguajes os recomiendo echar un vistazo a ambos artículos. En esta ocasión os voy a contar mi experiencia desde el punto de vista de un desarrollador Groovy al usar (y aprender) Kotlin durante una semana.
¿Estás prepado? ¡Qué comience el combate!
¿Cómo empezó esto?
Aunque oí hablar de Kotlin hace ya bastante tiempo, no lo vi en acción realmente hasta el pasado febrero en una conferencia. Svetlana Isakova, una de las desarrolladoras de JetBrains trabajando en el compilador dio una charla en la que explicaba las principales características de Kotlin y cómo puede ayudar a los desarrolladores Android. Durante la presentación Svetlana fue mostrando las principales características y muchas de ellas habían sido copiadas de Groovy y además la sintaxis es muy similar. En ese momento pensé que debía ser muy fácil para un desarrollador Groovy empezar a utilizar Kotlin. Unos meses después, aprovechando la semana de innovación semestral que tenemos en mi empresa decidí que era el momento de probarlo.
Mis primeros pasos con Kotlin
Como ya soy usuario de IntelliJ lo único que tuve que hacer fue crear un proyecto Kotlin y el IDE me sugirió instalar el plugin correspondiente y actualizar el compilador de Kotlin a la última versión (1.0.3). Si eres de Eclipse no te preocupes porque JetBrains también se encarga de mantener el plugin para este IDE.
Después me dirigí a la documentación oficial y estuve leyendo las principales características del lenguaje como tipos básicos, data clases, funciones, lambdas, smart casts, null safety,... y probando pequeños snippets de código en el IDE. Las primeras sensaciones fueron buenas.
Al día siguiente decidí empezar a aprender practicando y me decidí a probar las Kotlin Koans. Se trata de un montón de tests que fallan agrupados en distintas categorías. La idea es poco a poco escribir el código que hace pasar los tests y ir aprendiendo las distintas funcionalidades del lenguaje. Un pensamiento que repetí varias veces según iba avanzando en la resolución de las Koans fue como en Groovy o esto es exactamente igual a como lo resolvería con Groovy. De hecho viendo algunos fragmentos de código aislados no se podría distinguir si el código es Kotlin o Groovy.
Debo reconocer que para un desarrollador Java el uso de Kotlin supone una gran mejora. Incluso con todas las ventajas de Java 8, las lambdas, el API de streams,... el uso de Kotlin para el manejo de, por ejemplo, colecciones hace que el código quede muy conciso, sencillo y fácil de entender. ¿Y para un desarrollador Groovy? Pues nada nuevo. Es algo que llevamos haciendo desde hace muchos años.
Siguiente paso: Desarrollar un programa "de verdad"
El objetivo de la semana de innovación de mi empresa es que al final de la misma se presente algo funcional y que pueda resolver algún problema. En mi caso, decidí utilizar el API Json de nuestra intranet para obtener ciertos datos, filtrarlos y enviar un email al equipo con ellos. En principio nada complicado y a priori sencillo.
Mi primera complicación fue la búsqueda de un cliente Http. El ecosistema de Kotlin todavía no es muy extenso aunque está creciendo poco a poco. Después de buscar y probar varias bibliotecas finalmente me decidí por Fuel. Con unas cuentas pruebas pude programar las distintas llamadas al API para obtener la información que necesitaba. Debo reconocer que esta, a priori sencilla tarea, me frustró más de lo que pensaba al principio.
El hecho de que Kotlin sea un lenguaje tipado hace que, por ejemplo, al consumir un API Json tengamos que definir explícitamente los datos que vamos a recibir para que nuestro cliente Http haga la conversión correspondiente. Por contra al utilizar un lenguaje dinámico como Groovy esto no es necesario (si no queremos), lo que simplica enormemente consumir el API y extraer la información que deseamos de una manera fácil y directa.
Para el tema del email utilicé JavaMail y no tuve ninguna complicación a la hora de enviar emails desde Kotlin.
Sensaciones
Lo primero que debo reconocer es que la integración del lenguaje con el IDE es perfecta. Aunque el soporte de Groovy en IntelliJ es muy bueno, en ocasiones cuando estamos escribiendo código dinámico no es todo lo exacta que debería ser. En el caso de Kotlin, al ser estático, el IDE conoce el código con exactitud y nos sugiere en cada paso los métodos adecuados y nos muestra detallados errores cuando el código no compila. Hablando de errores de compilación, a veces es frustrante el tener ciertos errores que no terminas de entender del todo y realmente no sabes muy bien por qué pasan y cómo solucionarlos. Obviamente el problema aquí no es el lenguaje sino mi falta de experiencia con él.
Otra característica del lenguaje que me resultó muy interesante fue el uso "protección contra nulos". El compilador sabe en todo momento si una función o variable puede contener valor nulo y en este caso te obliga a declararlo de tal forma y a proteger el código contra NullPointerException
s. Si no lo haces el código no compilará por lo que es muy complicado tener este tipo de excepción tan común en código Java, aún así hubo una vez que lo conseguí ;)
También me gustó mucho el hecho de que se fomente el uso de variables inmutables (definidas con val
) en lugar de variables mutables (definidas con var
). De hecho, cuando defines una variable mutable el IDE la marca en otro color queriendo decir tú sabrás pero a lo mejor deberías pensar en declararla inmutable.
Para terminar, destacar que para construir el ejecutable final utilicé Gradle y, aunque no fue directo hacerlo funcionar a la primera, después de un momento todo funcionó sin problema.
Pero entonces, ¿te pasas a Kotlin?
No, no me paso a Kotlin, al menos de momento. Kotlin me ha parecido un gran lenguaje y sin duda va a seguir dando mucho de qué hablar. Creo que en cuanto añadan nuevas características va a tener todavía más tracción en la comunidad, pero de momento no es para mí. Me siento muy cómodo teniendo la flexibilidad de Groovy dinámico pero a la vez poder declarar un método o clase estático cuando quiero. Aún así, si todavía programas con Java te recomiendo que lo pruebes (al igual que Groovy) porque seguro que te va a gustar.
Más información | Kotlin, Groovy En Genbeta Dev | Kotlin: La Máquina Virtual de Java tiene un nuevo aliado