¿Han usado Kotlin? ¿Qué es lo que ofrece respecto a Java y otros lenguajes dependientes de la JVM?

Últimamente he estado usando Kotlin por mera curiosidad. Nada de proyectos reales. Por lo que veo y he notado se está llevando de corbata a lenguajes como Scala y Groovy. Y más aún dado que ahora hasta Google promueve su uso para desarrollar en Android (el matador de memoria preferido por los programadores masoquistas).

Proyectos como Ceylon prometían mucho, pero es un hecho que éste lenguaje (Kotlin) lleva la delantera. Migrar un proyecto hecho en Java a otros lenguajes es muy arriesgado. Java es un mundo enorme, siempre hay algo nuevo que ver. Con Kotlin se abre otro mundo.

No es sorpresa saber que existen 1010101010 de alternativas para nosotros los desarrolladores. Que si es mejor usar Angular, Vue, React, Node y olvidarte de Java, porque Java es difícil y es mejor Javascript por que es el futuro (lo he escuchado).

Ahora sería mu útil saber si alguien lo ha usado y qué ventajas ha encontrado respecto a lenguajes como Ceylon, Scala, Groovy y el propio Java.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Como en todas las tecnologias actuales

Depende de que estes buscando con respecto a java, en lo personal creo que es ligeramente mas lento que java (en practicidad no se nota) pero te ofrece programacion funcional mas amigable sin ser puramente funcional como clojure, compila a javascript aunque yo no hago eso porque en lo personal me gusta javascript, definitivamente escribes menos y es compatible con java aunque como en todo hay excepciones.

Tal vez su mejor caracteristica es el soporte de co-rutinas, algo asi como async/await en otros lenguajes, definitivamente inspirado por go y con mucho en comun con event loop en javascript, por lo que la programacion concurrente y ayncrona no deberia tantos dolores de cabeza como en java solito o en c++.

Imagen de ezamudio

Comparación

Lo bueno de Kotlin, que no tenga Java 8:

  • Data classes
  • Destructuring
  • top-level methods
  • varianza en sitio de declaración
  • inferencia de tipos (esto ya está en Java 11)
  • typesafe null
  • interpolación de valores en cadenas
  • smart casts
  • sobrecarga de operadores
  • Métodos de extensión

Lo malo de Kotlin:

  • Métodos de extensión
  • La sobrecarga de operadores es informal
  • La combinación de los dos puntos previos permite escribir código poco mantenible
  • Typesafe null tiene un switch para apagarlo y todo mundo lo usa
  • Siguen existiendo los stupid casts
  • non-local return en closures

¿Y Ceylon, apa'?

Disculpa el off-topic, Sr. Negativo, pero tengo curiosidad en saber qué ha sucedido con Ceylon. Quizás @ezamudio pueda decir algo al respecto.

Re: ¿Y Ceylon, apa'?

¡Uy! ¿Demasiado ocupados en otra cosa o se ha perdido el interés?:

:-/

Se ha perdido el interés

Me he dado cuenta que conforme pasa el tiempo se ha perdido el interés en esta comunidad, hace algunos años afecto la compra de SUN por parte de Oracle, en la actualidad afecto la noticia de que Java 11 sera de pago, algunos chamacos utilizaban este foro para que la gente les ayudara con las tareas de su escuela (obvio a nadie le interesaba responder).

Pasa mucho

Pasa como muchos proyectos incluida la version 2 de javamexico, nacen con mucho interes y apoyo, pero se apagan poco a poco ya sea por falta de tiempo de los involucrados, falta de interes o que no se ve realmente un beneficio o existe algo mejor.

Imagen de ezamudio

Ceylon

Pues no hay anuncio ni nada, pero lo que ha pasado últimamente ha sido:

  • Se donó el proyecto a la Eclipse Foundation
  • Para poder continuar en el proyecto, o para recibir contribuciones nuevas, hay que registrarse con la Eclipse Foundation, es un proceso bastante tedioso.
  • En 2017 sacaron a todos los contratistas del proyecto y se quedaron inicialmente 3 personas de Red Hat nada más
  • Una de esas 3 personas se fue a otros proyectos en 2017 o 2018
  • Desde entonces no ha habido nada de actividad
  • Silencio durante ya casi dos años
  • Se anuncia Quarkus, donde participan varias personas que estaban en Ceylon
  • Le están haciendo mucha promoción, a diferencia de Ceylon que parecía ser el secreto mejor guardado de Red Hat

La conclusión se deja como ejercicio al lector.

Imagen de ezamudio

Java 11

Mientras tanto, en el mundo empresarial... yo siento que Kotlin no tiene suficientes ventajas como para competir con Java 11/12. Hace 3-5 años había mucha diferencia, pero conforme salieron nuevas versiones de Java, pues empezaron a ponerse al corriente en cosas que le faltaba para modernizarse... entre lambdas, streams y Optional la verdad yo por ejemplo ya siento que Java está bastante mejor que Groovy (por mencionar otro, porque la verdad el mayor atractivo de Groovy, al menos para mi, eran los métodos adicionales que tenían las colecciones, que ahora se puede hacer con streams y que incluso los de Groovy dicen que son más eficientes los streams).

Con Lombok, te olvidas de estar escribiendo (o generando con el IDE) los setters y getters, el toString y hashCode. También tiene anotaciones para generar constructores para todos los campos finales de una clase. Puedes hacer builders incluso. Con eso ya estás muy cerca de tener algo como las data classes de Kotlin, y tienes lo mismo que con las propiedades de clase de Kotlin y Groovy.

En general Kotlin tiene varias cosas que no me parece que hayan sido muy bien diseñadas, y no sé si van a tener en el futuro los mismos problemas de Scala: que cualquier feature que se les ocurre se lo agregan, haciendo que el lenguaje sea innecesariamente complicado. Los métodos de extensión y la sobrecarga de operadores parecen cosas muy buenas pero en realidad pueden dañar la legibilidad del código y causar confusión.

Lo único que me llama la atención de Kotlin ahorita son las corrutinas (o co-rutinas o como quieran llamarles, coroutines pues) porque es un modelo de concurrencia muy pero muy sencillo y que no se tiene en Java. Es algo que debió haber implementado Ceylon en vez de insistir en dejar la concurrencia a bibliotecas externas para no meter cosas al lenguaje que no se pudieran hacer en Javascript.

Imagen de Sr. Negativo

Java 11...

Es el acabose

Entonces como conclusión, en

Entonces como conclusión, en términos generales si se quiere continuar desarrollando para el ecosistema de la JVM lo mas conveniente es continuar programando en las nuevas versiones de Java (8 - 11) ?

Imagen de ezamudio

lo más fácil

Pues depende de qué conveniencia hablas, @javadicto. En general creo que en cualquier proyecto va a ser más fácil que te dejen usar una versión más nueva de Java, que introducir un lenguaje nuevo.

Buena experiencia con Kotlin

Hola, en Creditas estamos teniendo una buena experiencia con Kotlin en el backend y incluso estamos dejando Ruby de lado y creando toda nuestra nueva arquitectura en Kotlin. Escribimos un blog post contando ese histórico si les interesa:

Saludos