Nos emociona anunciar que hemos comenzado el programa de acceso anticipado para Kotlin 1.2: hoy sacamos el primer hito, la <code class="highlighter-rouge">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"))

publicclassBookRepositoryImpl{

// ....

}`
En Kotlin 1.2, los literales de colección se pueden usar en lugar de la función `arrayOf`:
`@CacheConfig(cacheNames=["books","default"])

publicclassBookRepositoryImpl{

// ....

}`
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:

`inlinefun<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 <code class="highlighter-rouge">KEEP-49 que introduce operaciones adicionales y extensiones de conversión para los tipos <code class="highlighter-rouge">BigInteger y <code class="highlighter-rouge">BigDecimal, para las cuales nos gustaría agradecer a Daniil Vodopian.

El segundo es <code class="highlighter-rouge">KEEP-11 que incluye un conjunto de funciones relacionadas con el particionamiento de colecciones y secuencias:

  • El método de extensión <code class="highlighter-rouge">chunked(size: Int) que particiona una colección en bloques de un determinado tamaño
  • <code class="highlighter-rouge">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
  • <code class="highlighter-rouge">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 <code class="highlighter-rouge">fill() y <code class="highlighter-rouge">suffle() para las <code class="highlighter-rouge">MutableList así como <code class="highlighter-rouge">shuffled() para <code class="highlighter-rouge">List, y también la clase <code class="highlighter-rouge">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 <code class="highlighter-rouge">IntArray, <code class="highlighter-rouge">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 <code class="highlighter-rouge">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 <code class="highlighter-rouge">Tools → Kotlin → Configure Kotlin Plugin Updates, y seleccionad <code class="highlighter-rouge">“Early Access Preview 1.2” en el despleable de <code class="highlighter-rouge">Update channel, y pulsad <code class="highlighter-rouge">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.