Nos complace anunciar otra actualización beta de Kotlin 1.0. Estamos enfocados en finalizar
la librería estándar y en deshacernos de las construcciones deprecadas del lenguaje, así como
arreglar bugs, mejoras de rendimiento y comprobaciones en vistas al futuro.

  • Podéis encontrar la lista completa de cambios aquí.
  • Y la lista completa de tareas cerradas aquí.

Cambios en la librería

Estamos trabajando duro en la librería estándar para que esté en el mejor estado posible
antes de la 1.0. Esto incluye algo de experimentación, así deprecamos algunas cosas y añadimos algunas funciones. Tenemos planeado hacer la última limpieza de la librería estándar en la build 1.0 (o en la RC): quitar todas las cosas legadas y deprecadas.

En relación a esto únicamente vamos a destacar un cambio: <code class="highlighter-rouge">contains()
y otras extensiones similares ahora aceptan supertipos de los elementos de la colección.

`// strs: Collection

// ns: String?

// cs: CharSequence

// i: Int

strs.contains(ns)// accepted now

strs.contains(cs)// accepted now

str.contains(i)//ERROR(infact,adeprecationwarning,butwillbeanerrorsoon)`
Nos hemos dado cuenta de que la aproximación propuesta anteriormente `containsRaw` era ineficiente, y hemos optado por hacer `contains()` algo más permisivo, a la vez que mantenemos la seguridad que queríamos inicialmente. Nótese que la interfaz de las colecciones en sí misma se mantiene intacta, y que todo esto se hace exclusivamente mediante funciones de extensión. Usad *Code Cleanup* para migrar el código.

Cambios en el lenguaje

Algunas cosas destacadas sobre los cambios en el lenguaje, la lista completa se puede
encontrar aquí.
Muchas de las cosas que habíamos deprecado ahora son errores. Usad Code Cleanup para migrar.

Expresiones when

Tenemos comprobado que este tipo de código suele ser problemático y lo hemos deprecado:

`when{

foo.isValid(),foo.isReady()->process(foo)

...

}`
Mucha gente solía pensar que la condición `foo.isValid(), foo.isReady()` significaba que foo era válido y a la vez estaba listo, pero en realidad la coma representa una disyunción. La solución es trivial: simplemente reemplazar la coma por.
`when{

foo.isValid()||foo.isReady()->process(foo)

...

}`
*Code Cleanup* os ayudará a migrarlo.

Anotaciones

Hemos arreglado un bug que nos impedía usar arrays en valores por defecto para los parámetros de las anotaciones:

`annotationclassEntry(valvalue:String)



annotationclassExample(

valentries:Array<Entry>=arrayOf(Entry("a"),Entry("b"))// OK now

)`
## Enum.values()

Recientemente cambios el <code class="highlighter-rouge">Enum.values() tradicional de Java para convertirse en una propiedad: <code class="highlighter-rouge">Enum.values, pero vamos a revertir este cambio porque hay un caso límite bastante peliagudo: un enumerado podría tener un elemento llamado values, y entonces sería imposible acceder a alguno de los dos. Hemos considerado varias opciones, y hemos decidido que hacer que values vuelva a ser una función es el más limpio.

Así que la propiedad values pasa ahora a estar deprecada y la función <code class="highlighter-rouge">values() deja de estar deprecada.

Reglas de visibilidad y alcance

Vamos a proceder a limpiar y arreglar problemas menores en las reglas de visibilidad y alcance (scopes), de forma que:

  • Se permiten miembros <code class="highlighter-rouge">protected en los companion object
  • Llamar a miembros <code class="highlighter-rouge">protected que no estén marcados con @JvmStatic desde subclases, ahora serán errores (no soportado)
  • Los setters <code class="highlighter-rouge">private en las propiedades <code class="highlighter-rouge">open
  • Hemos deprecado las clases locales <code class="highlighter-rouge">sealed (nunca fueron usables)
  • No permitimos reducir la visibilidad en la sobrecarga de los setters
  • Ya no permitimos clases internas dentro de las entradas de los enum
  • No permitimos el uso de variables sin inicializar en lambdas / literales de objeto / funciones locales.

Extensiones de Android

Hemos combinado el plugin principal de Kotlin para InteliJ IDEA con el plugin Kotlin Extensions For Android. El plugin de extensiones de android queda obsoleto ya que su funcionalidad está incluída en el plugin principal de Kotlin.

También hemos añadido soporte para los <code class="highlighter-rouge">product flavors de Android: ahora las propiedades de los distintos flavours están disponibles en diferentes paquetes.

Por ejemplo, si tenemos dos <code class="highlighter-rouge">flavors en el archivo <code class="highlighter-rouge">build.gradle:

`productFlavors{

free{

versionName"1.0-free"

}

pro{

versionName"1.0-pro"

}

}`
Ahora podemos usar propiedades sintéticas no solo para los layouts en el fuente principal, sino también en los layouts de los `flavor`:
`// Import synthetic properties for the `activity_free.xml` layout in the `free` flavor

importkotlinx.android.synthetic.free.activity_free.versionMarker



classFreeActivity:AppCompatActivity(){

overridefunonCreate(savedInstanceState:Bundle?){

...



setContentView(R.layout.activity_free)



...



versionMarker.text="Free version"

}

}`
Notad que todos los layouts para el set de fuentes principal está localizado en el paquete `kotlinx.android.synthetic.main`, y que hemos deprecado la convención de nombres de los viejos paquetes.

Novedades en el IDE

  • Hemos combinado el plugin de Extensiones de Android Extensions en el plugin principal y ya no hace falta instalarlo por separado
  • Hemos añadido la opción de elegir Kotlin cuando creamos un proyecto Gradle nuevo:
  • Debugger: la navegación de stacktraces ahora permite ver los frames de las funciones inline. También hemos hecho un montón de mejoras a la hora de ir paso a paso en las funciones inline.
  • Hemos añadido tres Quick Fixes a la inicialización de propiedades:
  • Introduce Variable (Ctrl+Alt+V / Cmd+Alt+V) soporta ahora expresiones milti-declaración:
  • También permite elegir la expresión objetivo en las lambda/funciones anónimas:
  • La Beta 3 trae soporte para Introduce Variable/Parameter/Property/Function de fragmentos de templates de cadena

Finalmente, hemos añadido una característica experimental – soporte básico para archivos de scripting de kotlin (.kts) en el IDE.