¡Por fin Kotlin ha pasado la fase Beta y ahora estamos enormemente complacidos de presentar la RC (Release Candidate)!

NOTA: como anunciamos previamente, la RC requiere que se recompile todo el código para asegurarnos de que no queda código de versiones antiguas por ahí (¡por favor, recompilad incluso si estabais en versiones EAP!).

Este blog da una visión de conjunto de los cambios que han ocurrido desde la Beta 4. Esta es la build con más cambios en la librería. Y también hemos corregido algunos bugs. Podéis encontrar la lista completa de cambios aquí.

Discursiones en Hacker News y Reddit.

Lenguaje

En primer lugar, como ya prometimos, ha habido una limpieza:

  • Las construcciones del lenguaje que habíamos deprecado ahora son errores en vez de avisos.
  • Hemos borrado todas las declaraciones deprecadas previamente en el código generado a nivel de byte code (como campos estáticos en interfaces y similares).

La mayor parte de los cambios en el lenguaje son pequeños ajustes y correcciones de errores. Vamos a destacar algunos, y podéis ver la lista completa aquí.

Anotaciones en los campos delegados

Ahora soportamos un nuevo objetivo de anotación: <code class="highlighter-rouge">@delegate:. Por ejemplo, para marcar el objeto delegado como <code class="highlighter-rouge">@Transient, podemos usar lo siguiente:

`classExample{

@delegate:Transient

valfoobyLazy{...}

}`
A nivel de *byte code*, se anotará el campo que sustenta el delegado.

Comprobación de tipos en la variancia en sitios de uso

Hemos arreglado un conjunto de bugs relacionados con la variancia en sitios de uso (proyecciones de tipo). Como resultado, el compilador puede encontrar algunos bugs que se había escapado en el código.
Por ejemplo, en el siguente caso:

`valints=mutableListOf(1,2,3)

valstrs=mutableListOf("abc","def")

valcomps:MutableList&lt;outComparable<*>>=ints

comps.addAll(strs)//?!Addingstringstoalistofints`
Antes el compilador aceptaba este c´ódigo por error y ahora produce un error en la última línea con el siguiente mensaje:

<code class="highlighter-rouge">Projected type MutableList<out Comparable<*>> restricts the use of addAll()

Interoperabilidad con Java

Hemos hecho algunas mejoras a las propiedades sintéticas derivadas de los pares get/set de Java.

  • Dichas declaraciones (así como los métodos convertidos SAM) se resuelven a la par con miembros
  • Hemos añadido soporte a los setters de Java que devuelven valores.

Hemos añadido soporte para las anotaciones <code class="highlighter-rouge">@Nullable/NotNull de varias librerías populares como <code class="highlighter-rouge">javax.annotations, Android SDK, etc.

Los usuarios de EAP informan:

Las anotaciones de Android reconocidas me rompen un montón de código en el buen sentido

Y correcciones de errores destacadas:

  • Las clases de Kotlin privadas sin paquete ahora se compilan a clases Java privadas de paquete
  • Ahora no se puede acceder a los miembros privados de la clases desde funciones inline no privadas

Librería estándar

  • El código de la librería ahora está reordenado en paquetes más granulares (no debería hacer falta cambios en el código)
  • Hemos hecho inline algunas funciones
  • Muchas funciones inline (la mayor parte de una sola línea) ya no se pueden llamar desde Java. Esto nos ayudará a reducir el tamaño de la librería de runtime en un futuro.
  • Hemos borrado todas las cosas que habíamos deprecado previamente.
  • Ahora <code class="highlighter-rouge">Map.getOrElse() y <code class="highlighter-rouge">Map.getOrPut() tratan las claves asociativas con valores <code class="highlighter-rouge">null como no encontradas.
  • Añadidas <code class="highlighter-rouge">mutableListOf, <code class="highlighter-rouge">mutableSetOf y <code class="highlighter-rouge">mutableMapOf para construir colecciones mutables.
  • Añadida <code class="highlighter-rouge">toMutableList en vez de <code class="highlighter-rouge">toArrayList. La última está deprecada.
  • Se han añadido <code class="highlighter-rouge">associate y <code class="highlighter-rouge">associateBypara ayudar en la construcción de mapas (reemplazando a <code class="highlighter-rouge">toMap/<code class="highlighter-rouge">toMapBy)
  • Comparator y funciones relacionadas como comparaciones se han movido al paquete <code class="highlighter-rouge">kotlin.comparisons (que no se importa por defecto).

Más cambios aquí.

Herramientas

Para habilitar las extensiones de Android en Gradle de una forma más ideomática, ahora podemos poner:

`applyplugin:'kotlin-android-extensions'`
in el archivo `build.gradle` (de cada proyecto individual).

La forma antigua ya no funciona e imprime instrucciones para arreglarlo en la salida.

Cambios en el IDE

  • Intención para reemplazar la iteración sobre entradas de un mapa, con un bucle usando una destructuración
  • Inspección y quickfix para limpiar modificadores de visibilidad redundantes
  • Inspección para reemplazar llamadas <code class="highlighter-rouge">assert con comprobaciones de variables nulables o no nulables con <code class="highlighter-rouge">!! o <code class="highlighter-rouge">?: error(...)
  • Mostrar una notificación de “Kotlin not configured” al abrir un archivo .kt en el IDE si no está configurado el runtime de Kotlin en el módulo correspondiente
  • Acción para generar el método <code class="highlighter-rouge">toString()
  • Soporte para implementar miembros mediante parámetros primarios de construcción
  • El popup con información de parámetros funciona para mostrar los parámetros genéricos
  • El competado ofrece variantes de nombre basados en identificadores sin resolver en el archivo actual
  • Quickfix para añadir ramas restantes en expresiones <code class="highlighter-rouge">when
  • Soporte para mover clases anidadas al nivel superior o en otra clase raíz
  • Ya funciona <code class="highlighter-rouge">@Supress en las inspecciones del IDE

Instrucciones de instalación

para los usuarios de IntelliJ IDEA, puede que las actualizaciones automáticas no funcionen en el IDE, así que necesitaréis descargar el plugin e instalarlo desde un archivo zip:

  • Descargarlo aquí
  • Ir a *PreferencesPlugins and click Install plugin from disk…*

Sentimos las molestias

Estad atentos

La versión final se acerca… Mientras tanto: ¡que tengáis un buen Kotlin!

P.D: Ved las discursiones en Hacker News y Reddit.