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.2-M1'

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

Nos emociona anunciar que hemos comenzado el programa de acceso anticipado para Kotlin 1.2: hoy sacamos el primer hito, la 1.2-M1.

Esta versión habilita por defecto características nuevas del lenguaje que ya estaban en la 1.1.x bajo la opción experimental. También podéis echar un vistazo a la nueva API de la librería estándar.

La lista de cambios completa, aunque no demasiado grande, la podéis encontrar en el changelog.

Característica del lenguaje: literales de array en anotaciones

La única características del lenguaje destacable añadida en esta versión son los literales de colección, cuyo uso está restringido para especificar arrays en los argumentos de las anotaciones.

Anteriormente uno tenía que escribir algo como esto para especificar un array de valores:

@CacheConfig(cacheNames = arrayOf("books", "default"))
public class BookRepositoryImpl {
    // ....

}

En Kotlin 1.2, los literales de colección se pueden usar en lugar de la función arrayOf:

@CacheConfig(cacheNames = ["books", "default"])
public class BookRepositoryImpl {
    // ....

}

Hemos incluido una inspección del IDE que os propondrá usar la nueva sintaxis de los literales de colección cuando sea apropiado.

Funciones inline con parametros funcionales opcionales

Hasta ahora era imposible declarar una función de órden superior inline con un parámetro funcional opcional como esto:

inline fun <E> List<E>.printItems(transform: (E) -> String = { it.toString() })

Uno tenía que o bien hacer que la función no fuese inline o marcar el parámetro funcional como noinline. En cualquiera de los casos perdiendo el sentido del inlining de los parámetros funcionales.

Ahora soportamos totalmente este caso.

Librería estándar

Esta versión incluye dos KEEPs (Kotlin Evolution and Enhacement Proposals) en relación al API de la librería estándar.

El primero es KEEP-49 que introduce operaciones adicionales y extensiones de conversión para los tipos BigInteger y BigDecimal, para las cuales nos gustaría agradecer a Daniil Vodopian.

El segundo es KEEP-11 que incluye un conjunto de funciones relacionadas con el particionamiento de colecciones y secuencias:

  • El método de extensión chunked(size: Int) que particiona una colección en bloques de un determinado tamaño
  • windowed(size: Int, step: Int) toma una ventana de un tamaño dado y lo mueve a través de la colección con un paso específico que devuelve las sublistas de elementos que recaen en cada una de las ventanas
  • pairwise() devuelve los pares consecutivos en una colección

Por favor, probad dichas funciones si os interesa n y comentadnos si os encajan en vuestros casos de uso.

Hay también algunas otras mejoras, como las extensiones fill() y suffle() para las MutableList así como shuffled() para List, y también la clase Regex se ha vuelto serializable.

JavaScript

En la 1.1.2 ya introdujimos soporte opcional para los arrays tipados de JavaScript. Cuando se habilita, convierte las arrays primitivas de Kotlin, como IntArray, DoubleArray etc. en los arrays tipados de JavaScript. Ahora la opción ya no se requiere y está habilitado por defecto.

Notas de la versión preeliminar

Nótese que las garantías de compatibilidad binaria hacia atrás no cubren las versiones preeliminares: las características y el API pueden cambiar en versiones posteriores. Cuando lleguemos al RC final, el compilador no aceptará ningún binario producidos por versiones preeliminares: será necesario reompilar todo lo que haya sido compilado con la 1.2-Mx. Sin embargo todo el código compilado con la 1.1.x y versiones anteriores es perfectamente compatible sin recompilación alguna.

En esta versión no serás capaz de compilar contra el viejo runtime si usas funciones inline suspendibles.

Cómo probarlo

En Maven/Gradle: Añadid http://dl.bintray.com/kotlin/kotlin-eap-1.2 como repositorio para vuestro build script y vuestros proyectos; usad 1.2-M1 como número de versión para el plugin de compilación y la librería estándar.

En IntelliJ IDEA: Id a Tools → Kotlin → Configure Kotlin Plugin Updates, y seleccionad “Early Access Preview 1.2” en el despleable de Update channel, y pulsad Check for updates.

El compilador de la línea de comandos se puede descargar de la página de versiones de Github.

En try.kotlinlang.org: Usad el desplegable en la esquina inferior derecha para cambiar la versión del compilador a la 1.2‑M1.