Kotlin 1.4 Online Event | Apiumhub

Recientemente se celebró el Kotlin Online Event organizado por Jetbrains para hablar de la última versión del lenguaje y además suplir así lo que en principio y en circunstancias normales hubiera sido la KotlinConf que ha sido pospuesta para el año que viene. 

El evento transcurrió a lo largo de 4 días con conferencias cortas, de normalmente menos de 30 minutos y agrupándolas en función de su temática, cada día dedicado a un aspecto distinto. Todas las conferencias se concentraban por la tarde, cosa que que fue todo un acierto.  

Para este evento a diferencia de otros eventos 100% online se optó por pre-grabar las conferencias con el fin de obtener un resultado más controlado y evitar problemas asociados al directo. A la conferencia le acompañaba siempre un espacio de 10 minutos más o menos dedicado a preguntas y respuestas. A parte, algunas de las conferencias tenían como extra un conjunto de tests para comprobar lo aprendido, con la opción de ganar algunos premios. Aunque personalmente no utilicé este elemento creo que es interesante y una buena iniciativa.

Las conferencias se agruparon de la siguiente forma:

  • Día 1: Visión general (General Overview).
  • Día 2: Librerías de Kotlin (Kotlin Libraries).
  • Día 3: Kotlin everywhere: Android, KMM, JS.
  • Día 4: Server-side Kotlin.

Día 1

La primera de las charlas tenía como objetivo presentar los temas más importantes que se tratarían a lo largo del evento haciendo referencia a las charlas posteriores. 

Los principales temas comentados fueron: 

  • El progreso y estado actual del nuevo compilador de Kotlin con un frontend 4,5 veces más rápido.
  • Las mejoras en el sistema de inferencia de tipos con el que han arreglado más de 300 “issues”.
  • Los planes para soportar nuevas características de Java 14 y Java 15.
  • Kotless un framework para backends serverless.
  • Kotlin multiplatform y sus librerías para concurrencia, serialización y fechas.
  • Las mejoras en tamaño de fichero con el nuevo compilador en KotlinJS. 
  • Planes de futuro para WebAssembly.
  • El estado actual (beta) y los planes de mejora para KMM (Kotlin multiplatform mobile). 

La siguiente conferencia se centraba en la comunidad de Kotlin y como contribuir al proyecto. Compartir estadísticas y el uso que se hace de estas, utilizar versiones de prueba (EAP early-access-program), reportar problemas o incompatibilidades a través de YouTrack son algunas de las cosas que ayudan a mejorar y evolucionar el ecosistema.

A continuación venía la charla “New Language Features in Kotlin 1.4” donde se trataba  de las nuevas funcionalidades del lenguaje en la última versión.

  • SAM (single abstract methods). Esto nos permite pasar una lambda cuando un método recibe por parámetro una interfaz con un solo método. Esta característica ya estaba disponible con interfaces definidas en Java y ahora podemos hacer lo mismo con interfaces definidas en Kotlin con la siguiente sintaxis: fun interface Action {}
  • Explicit mode es un proceso de validación que podemos activar desde gradle pensado para los creadores de librerías y que permite verificar un conjunto de recomendaciones: visibilidad de los métodos, especificar retorno, etc.
  • Trailing commas. Permite poner una coma “,” al final de un listado de argumentos, declaración de función o declaración de clase (constructor).
  • Break y continue dentro de when. A diferencia de la versión anterior Kotlin 1.4 si permite el uso del “keyword” continue dentro de una expresión when.
  • Mezcla de argumentos posicionales y argumentos con nombre.
drawRectangle(
    width = 10, height = 20, color = Color.BLUE
)
drawRectangle(
    width = 10, height = 20, Color.BLUE
)
  • Mejora de sistema de inferencia de tipos.
  • Unificación de las excepciones para nulls. En versiones anteriores de Kotlin dependiendo del contexto se podían lanzar distintas excepciones relacionadas con null. Ahora se ha unificado en una única excepción con la intención de poder optimizar determinadas comprobaciones a nivel de compilador, en un futuro. 

La penúltima conferencia del día estaba centrada en las mejoras realizadas en los IDEs y el uso de Kotlin. Mejoras en el auto-completado e indexación de código entre otras cosas. 

Para más información: https://www.youtube.com/watch?v=-5ZjMwNzWrk

La charla que más interés despertaba

Para terminar teníamos lo que yo personalmente categorizaría como el plato fuerte del día y quizás de la conferencia. Se trata de las próximas características de Kotlin.

Bajo el nombre “A look into the Future” Roman Elizarov nos recoge los temas más importantes que están por llegar en el lenguaje, no sin antes, hacer un breve repaso de los hitos o puntos clave del lenguaje a nivel histórico. La primera versión, la aparición de las corrutinas, la compatibilidad con Javascript, Kotlin/Native etc.

En el futuro más próximo se va a potenciar la interoperabilidad con versiones de Java más modernas para poder utilizar su versión de Sealed Classes y los Records (en esencia muy similar a una data class de Kotlin). 

Para el futuro más lejano se están centrando en las siguientes ideas:

  • Companion namespaces: a través de una nueva keyword se podría encapsular variables (constantes por ejemplo) o funciones dentro de un mismo concepto sin que este represente un tipo en concreto. Este nuevo elemento también se podría aplicar a las extensiones de Kotlin, namespace extensions.

 

 

  • Multiple receivers: esta característica nos permitiría poder crear una extensión cuyo cuerpo tuviera acceso a más de un contexto, es decir, que la extensión es sobre dos tipos a la vez. Para esto, aún no se ha definido una sintaxis final pero se está trabajando con la idea de utilizar decoradores. Decorator sería una keyword más del lenguaje que se podría añadir a una función para después, como una anotación (@), utilizarla en otras funciones. En el siguiente ejemplo, sacado de la presentación, vemos que se utiliza una anotación @with que en realidad es un decorador que hemos creado. Este decorador podría ser a su vez una función de extensión sobre View y al usarlo sobre otra extensión nos permite tener los dos “contextos” en el cuerpo de la segunda extensión.

 

 

Esta funcionalidad no solo está enfocada a las funciones de extensión sino que con los decoradores se podría simplificar otras situaciones.

  • Otra nueva característica con la que se trabaja es poder tener diferente visibilidad para una misma propiedad (getters y setters). Esto en el caso de Android, simplificaría el código que normalmente escribimos para “esconder” la versión mutable de un LiveData a los consumidores.

 

 

  • Por último, se está trabajando en una sintaxis que permitiría trabajar con un modelo inmutable pero con la fácil manipulación de una estructura mutable.

 

 

Con esto evitaríamos tener que hacer un .copy() cada vez que queremos modificar algún valor.

 

 

Esta nueva keyword unificaría las inline classes ya que de lo contrario surgirían problemas de compatibilidad con el proyecto Valhala. Con lo que una inline class pasaría a ser una value class con una anotación que indicaría al compilador que puede ser simplificada a un tipo primitivo. (esta anotación aún no está definida). 

Día 2

El segundo día se centraba en las librerías de Kotlin.

Primero fue el turno de las corrutinas donde se centraron en las mejoras del debugger y las nuevas APIs añadidas recientemente. ShareFlow y StateFlow

La siguiente charla se centraba en la librería de serialización y su primera versión estable. Kotlinx.Serialization es una librería multiplataforma que podemos utilizar en JVM, Native y JS

Además, también se presentó en otra charla una nueva librería para la gestión de fechas, Kotlinx.Date-Time. Esta es otra librería multiplataforma que utiliza java.time para JVM, js-joda para Javascript y ThreeTen para native.

A parte de estas charlas también hubo una centrada en las nuevas APIs añadidas en la librería estándar de Kotlin (stlib).

Día 3

Este día estaba focalizado en el uso de Kotlin en entornos frontend/mobile.

La primera de las charlas a cargo de Florina Muntenescu (de Google) se centraba en las iniciativas del equipo de Android para exprimir al máximo las virtudes de Kotlin. 

Un ejemplo es Jetpack Compose una librería escrita íntegramente en Kotlin y cuya dependencia en el nuevo compilador hace que las dos compañías estén colaborando estrechamente. A parte de esta librería también vemos que la integración con corrutinas está extendida en todas las librerías posibles: Room, Paging, DataStore…

Después tuvimos dos charlas centradas en KMM con una charla de KotlinJS entre estas dos. La primera de las dos charlas de KMM o Kotlin Multiplatform Mobile tenía un enfoque más introductorio.

Por otro lado, la charla sobre KotlinJS trataba de las mejoras que ha aportado la última versión de Kotlin: la interoperabilidad con paquetes distribuidos con NPM y la generación de definiciones estáticas con el proyecto Dukat que aún está en fase experimental. 

A parte de esto tenemos disponible la primera versión de kotlinx-nodejs que nos permitirá hacer uso de las APIs de node desde Kotlin.

Con la llegada del nuevo compilador esperan reducir el tamaño final de código JS al poder usar tree shaking a través de webpack, mejorar la compatibilidad con Typescript y poder así utilizar una librería de Kotlin en Typescript y viceversa. 

Para poder probar el nuevo compilador solo tenemos que añadir la siguiente línea el fichero de propiedades de gradles.

kotlin.js.compiler=ir

Día 4

Por último, el cuarto día estuvo dedicado al desarrollo de backends con Kotlin. 

Charlas sobre:

Conclusión

En mi opinión, lo más destacado de este evento se concentró en el primer día con la charla sobre el futuro del lenguaje, de ahí que me haya extendido un poco más en esa. Encuentro muy interesante la dirección que está tomando el lenguaje con las nuevas propuestas y tengo ganas de ver cómo evolucionan (decoradores, value-based class, namespaces).

El nuevo compilador es un proyecto que lleva ya un tiempo en proceso pero cuya repercusión merece toda la prudencia, y los avances enseñados nos indican que estamos cerca de una versión final. 

Las iniciativas en el mundo “mobile” no se quedan cortas y parece ser que KMM será un proyecto con mucho futuro. 

Ahora solo nos queda esperar para ver lo que traerá la versión 1.5.

Link