Nos complace anunciar el tercer hito del próximo Kotlin 1.1. Esta versión incluye nuevas características en el lenguaje así como mejoras y correcciones en el backend de JavaScript, el compilador y el plugin de IDEA. La nueva versión también incluye todas las mejoras en las herramientas introducidas en Kotlin 1.0.5, y es compatible con intelliJ IDEA 2016.3 EAP y Android Studio 2.2 y 2.3.

Como otra versión de hito, no damos **ningún tipo de garantía de retrocompatibilidad **para las nuevas características del lenguaje ni características en las librerías. Cualquier cosa introducida en las versiones hito de la 1.1 está sujeta a cambios antes de la liberación de la 1.1.

Por favor, compartid cualquier cosa en relación a las nuevas características o a cualquier problema que tengáis con esta versión, via YouTrack, foros y Slack.

El changelog completo de la 1.1-M03 se encuentra aquí.

Barra baja para símbolos sin usar

Ahora podéis usar una barra baja en vez de un nombre para un parámetro sin usar en las lambdas:

foo { _, x -> ... }

Y ahora también se puede usar la bara baja como nombre sin usar en las declaraciones de destructuración.

val (x, _, z) = expr

Ambos casos están descritos en detalle en el KEEP correspondiente.

Barra baja en literales numéricos

Siguiendo la especificación de Java 8, Kotlin soporta ahora
literales numéricos con una única barra baja entre dígitos. Por ejemplo:

val UN_MILLÓN = 1_000_000

Echad un ojo al KEEP para más detalles y ejemplos.

Acceso genérico a valores de un enum

La propuesta ha aterrizado en la librería estándar en forma de dos
funciones intrínsecas:

inline fun <reified T : Enum> enumValues(): Array inline fun <reified T : Enum> enumValueOf(name: String): T

Permiten enumerar los valores de un tipo enumerado genérico. Ejemplo:

enum class RGB { RED, GREEN, BLUE } print(enumValues().joinToString { it.name }) // imprime RED, GREEN, BLUE

Control de ámbito para los constructores tipo DSL

Como está descrito en detalle en el KEEP,
los autores de DSL tenían problemas expresando restricciones
ede ámbito para construcciones de construcción. Ejemplo, algunos DSL
para construir HTML:

table { tr { tr {} // PROBLEMA: Aquí Table.tr() es válido } }

Para paliar este problema hemos añadido la anotación <code class="highlighter-rouge">@DslMarkerque permite controlar el ámbito de visibilidad en estos casos de forma más precisa. Para ejemplos de uso, echad un ojo a la versión preeliminar de la librería kotlinx.html que usa esta característica (mirad las implementaciones de HtmlTagMarkerHTMLTag DSL-markers.md para información de uso preeliminar).

Unificación de la librería estándar

Estamos avanzando en el proceso de unificación para diferentes plataformas. Hemos empezado a unificar los tipos de excepción en la 1.1-M2 y ahora hemos hecho lo mismo con algunos tipos comunes que soportamos en todas las plataformas, disponibles en el paquete <code class="highlighter-rouge">kotlin.* y que se incluyen por defecto. Esos incluyen:

  • <code class="highlighter-rouge">ArrayList, <code class="highlighter-rouge">HashSet, <code class="highlighter-rouge">LinkedHashSet, <code class="highlighter-rouge">HashMap, <code class="highlighter-rouge">LinkedHashMap en <code class="highlighter-rouge">kotlin.collections
  • <code class="highlighter-rouge">Appendable y <code class="highlighter-rouge">StringBuilder en <code class="highlighter-rouge">kotlin.text
  • <code class="highlighter-rouge">Comparator en <code class="highlighter-rouge">kotlin.comparisons

En la JVM estos son únicamente tipos alias de los tipos de toda la vida de <code class="highlighter-rouge">java.util y <code class="highlighter-rouge">java.lang

Nuevas características soportadas en el backend de JavaScript

El backend de JavaScript ahora soporta las siguientes características del lenguaje de Kotlin a la par con el backend de la JVM:

  • Corrutinas
  • Destructuración en parámetros lambdas
  • Nombres de variable sin usar en declaraciones de destructuración

Mejoras en la generación de código JS

El backend de JavaScript ahora genera código que es más fácil de comprobar estáticamente, que es más amigable con las herramientas de procesado de JS, como minificadores, optimizadores, linters, entre otros.

Cómo probar

En Maven/Gradle: Añadid http://dl.bintray.com/kotlin/kotlin-eap-1.1 como vuestro repositorio en vuestro archivo de construcción; y usad <code class="highlighter-rouge">1.1-M03 como versión del compilador y de la librería estándar.

En IntelliJ IDEA: Id a Tools -> Kotlin -> <code class="highlighter-rouge">Configure Kotlin Plugin Updates, y seleccionad “Early Access Preview 1.1” en el desplegable Update channel, y pulsad Check for updates.

¡A Kotlin!