¿Qué es Kotlin?
Es un lenguaje de programación montado sobre la JVM. Originalmente se empezó a usar para desarrollar aplicaciones Android, pero últimamente fue ganando terreno en aplicaciones backend
¿Con Java no te alcanza?
Java es un lenguaje de programación excelente. Pero nació a mediados de los años 90 y pasaron ya muchos años desde que vio la luz. El desarrollo de software fue evolucionando, y si bien Java acompañó este cambio y fue sumando algunas cosas, fue quedando atrás en la carrera con algunos lenguajes posteriores, que tienen características más avanzadas, de un modo más natural, ya que fueron concebidos con esas características en mente desde el inicio.
¿Qué features tiene?
Data Class
Es la principal ausencia de Java. Nos permite crear clases que son solamente para almacenar info. Son nada más y nada menos que los viejos y queridos DTO’s, pero con esteroides. Nos proveen la implementación de los métodos equals y copy , y los setters y getters de cada atributo. Créanme que van a ahorrar mucho código sólo con usar los data class.
Null safety
En Kotlin los tipos de datos no permiten valor null, a menos que expresamente le indiquemos lo contrario. ¿Eso quiere decir que no tengo que estar nullchequeando todo? Exacto. ¿Y cómo hago si algo en mi negocio puede ser null? Se lo indico expresamente. Esto tiene 2 ventajas. La primera, es que en los valores que no admiten null, me olvido de andar poniendo “if (algo != null){doMagic()}” . La segunda, es que en el caso de los valores nulleables, tengo el operador “?”, y le puedo aplicar operaciones “let” y “run”, que se aplican solo cuando tiene un valor válido. El código queda mucho mas claro y conciso.
High Order Functions (funciones de orden superior)
Muchas veces quise mandar funciones como parámetro a un método para hacer el diseño más simple, pero desde Java eso se complica un poco, y no es directo (tenés que involucrar interfaces funcionales, o algún que otro truco). En kotlin, este concepto de la programación funcional ya viene derecho de fábrica a simplificarnos nuestras vidas.
Interoperabilidad con Java
Kotlin nació para ser usado en conjunto con Java. Puedo tener una clase en Kotlin en el medio de todo mi proyecto Java, puedo invocarlo desde y hacia código Java, y todo sigue andando. Eso me permite ir probando de a poco y migrar mi código iterativamente. Si no me gusta (cosa muy poco probable, creeme), puedo volver atrás muy fácilmente. Prácticamente no tiene costo de adopción.
Baja barrera de entrada
Kotlin nació para desarrolladores Java que quieran tener algunos features extra. No es un “barajar y dar de nuevo”. Cualquier desarrollador Java puede beneficiarse con Kotlin en unas pocas horas.
Operaciones funcionales sobre colecciones
Map, filter, forEach, first, last y otras vienen incluidas “de serie”. Nada de andar poniendo miLista.stream().map().collect(Collectors.toList()). En Kotlin es un simple miLista.map()
Named parameters
Cuando invocamos un método, podemos mandar solo algunos parámetros, indicando el nombre de ellos. Olvidate del patrón builder, ya no es necesario.
Extension functions
¿Te pasó que alguna vez pensaste “que bueno si esta clase tuviera este método” y no la podías cambiar porque era de una librería, o no estaba bajo tu dominio? Bueno, con Kotlin podemos declarar extension functions a un determinado tipo, para agregarle todas las funciones que querramos.
¿Cómo migrar a Kotlin?
Si usas Maven el proceso se reduce a copiar y pegar algo en el pom. No me voy a explayar en este punto, está bien conciso en la documentación oficial: https://kotlinlang.org/docs/reference/using-maven.html
Otra cosa muy importante, es tener un IDE que tenga buena integración. Como Kotlin fue desarrollado por la gente de Intellij, el soporte con este IDE es excelente. También tiene soporte en Eclipse, aunque personalmente no lo probé.
Pensamientos finales
Si estás desarrollando con Java, y tenes unos minutos libres, date la oportunidad de probar Kotlin. Si alguna vez probaste Scala, vas a encontrar la mayor parte de los features, a un precio mucho más bajo.
Satisfacción (y diversión) garantizada.