NOTA: Este artículo es una traducción manual de este otro artículo.

Versión preeliminar:

Esta es una versión preeliminar. Para poder utilizarla en maven o en gradle, tienes que incluir el repositorio de gradle http://dl.bintray.com/kotlin/kotlin-eap-1.2:

buildscript {
    ext.kotlin_version = '1.1-M03'

    repositories {
        maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
    

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<T>> enumValues(): Array<T>
inline fun <reified T : Enum<T>> enumValueOf(name: String): T

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

enum class RGB { RED, GREEN, BLUE }

print(enumValues<RGB>().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 ste problema hemos añadido la anotación @DslMarker que 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 HtmlTagMarker y HTMLTag y 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 idferentes 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 kotlin.* y que se incluyen por defecto. Esos incluyen:

  • ArrayList, HashSet, LinkedHashSet, HashMap, LinkedHashMap en kotlin.collections
  • Appendable y StringBuilder en kotlin.text
  • Comparator en kotlin.comparisons

En la JVM estos son únicamente tipos alias de los tipos de toda la vida de java.util y 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 1.1-M03 como versión del compilador y de la librería estándar.

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

¡A Kotlin!