Nos complace anunciar la liberación de una nueva versión de Kotlin, la 1.0.4, centrada en corrección de errores y mejoras de las herramientas.

Nuevamente nos gustaría agradecer a nuestros colaboradores externos que han implementado alguna de las características de esta versión, Kirill Rakhman y Toshinori Isogai, así como a todos los que han probado las versiones EAP de la 1.0.4 y nos han proporcionado feedback.

Podéis encontrar la lista completa de correcciones y mejoras en el changelog. Y algunos de esos cambios se merecen una mención especial:

Cambio del lenguaje: Asignación de <code class="highlighter-rouge">val en <code class="highlighter-rouge">try/catch

En versiones previas a Kotlin 1.0.4, podíais inicializar el mismo <code class="highlighter-rouge">val tanto en el <code class="highlighter-rouge">try como en las ramas <code class="highlighter-rouge">catch. Por ejemplo, el siguiente código era válido:

try { x = 1 } catch(e: Exception) { x = 2 }

Y eso implicaba que una variable final se podía asignar dos veces. Y era posible observar dos valores diferentes para la misma variable (por ejemplo, si el valor en la sentencia <code class="highlighter-rouge">try se capturaba en una lambda). En Java, el código equivalente es inválido.

Para mantener semánticas consistentes, el código que asigna el mismo <code class="highlighter-rouge">val en ambios sitios: las ramas <code class="highlighter-rouge">try y <code class="highlighter-rouge">catchpasan a ser una advertencia en Kotlin 1.0.4 y se convertirán en un error en la versión 1.0.5. En la mayor parte de los casos, el código se puede arreglar fácilmente convirtiendo el código a expresión, y el IDE ofrecerá un quickfix para convertir este código automáticamente. El ejemplo de arriba puede convertirse a:

val x = try { 1 } catch(e: Exception) { 2 }

Nuevo procesado de anotaciones experimental

Kotlin 1.0.4 incluye una nueva implementación experimental del api de procesado de anotaciones. Para habilitarlo, añadid lo siguiente a vuestro build.gradle:

apply plugin: 'kotlin-kapt'

También tendréis que eliminar el snippet que habilita el procesado antiguo de anotaciones:

kapt { generateStubs = true }

El nuevo procesado de anotaciones todavía tiene problemas conocidos y puede no ser compatible con todos los procesadores de anotaciones. Deberíais habilitarlo solo si tenéis problemas con la implementación por defecto del procesado de anotaciones <code class="highlighter-rouge">kapt.

Mejoras en el backend de JavaScript

El backend de JavaScript ahora es capaz de compilar código a sistemas de módulos compatibles con AMD, CommonJS y UMD. Echad un vistazo a la documentación.

Además de eso, se soporta una forma limitada de reflexión: ahora podéis usar la propiedad <code class="highlighter-rouge">jsClass para acceder la clase de cualquier objeto en runtime, y <code class="highlighter-rouge">jsClass<TypeName>() para coger la representación en runtime de una clase específica. Aquí hay un ejemplo más completo:

class A class B class C inline fun foo() { println(jsClass().name) } println(A().jsClass.name) // prints "A" println(jsClass().name) // prints "B" foo() // prints "C"

Mejoras de compilador

  • Mejor inferencia de tipos para expresiones callable
  • Mejor eficiencia de bytecode en varios casos para expresiones <code class="highlighter-rouge">when y <code class="highlighter-rouge">for
  • Mejor recuperación de parseo tras errores sintácticos
  • Corregidos varios casos donde “el casteo nunca tiene éxito” que se informaba incorrectamente

Mejoras en las herramientas de construcción

  • Completamente compatible con Gradle 2.14 y posteriores
  • La compilación incremental de gradle ahora puede llevar la pista de cambios entre subproyectos.
  • Las builds de CLI (Command Line Interface) y Ant añaden la librería de reflexión de Kotlin al classpath por defecto; usad el switch<code class="highlighter-rouge">no-reflect para deshabilitar.

Nuevas características en el IDE

  • Ahora tenéisla opción de usar la sintaxis de Kotlin al evaluar expresiones y watches in los archivos Java
  • Nueva inspección para detectar “leaking <code class="highlighter-rouge">this” – posibles problemas con NullPointerException causados por acceder a datos que no estaban completamente inicializados.
  • Intención para convertir una lambda en una referencia de función
  • Inspección para detectar discordancias entre la versión de Gradle y la versión del plugin de Kotlin
  • Otras muchas intenciones, inspecciones y quickfixes nuevos.

¿Cómo actualizar?

Para actualizar el plugin, usad ToolsKotlinConfigure Kotlin Plugin Updates y pulsad el botón “Check for updates now”. Y no olvidéis actualizar las veriones del compilador y la librería estándar en vuestros build scripts de Maven y Kotlin.
Como de costumbre, si os encontráis con cualquier problema en esta nueva versión, os invitamos a pedir ayuda en nuestros [foros](https://discuss.kotlinlang.org/), en slack ([invitaciones automáticas aquí](http://kotlinslackin.herokuapp.com/)), o reportar problemas en el [*issue tracker*](https://youtrack.jetbrains.com/issues/KT).

¡A Kotlinear!