Early Access Program

Lanzamiento de Kotlin 1.7.0 Beta

Read this post in other languages:
English, Français, 日本語, 한국어, Português do Brasil, 简体中文

Ya está disponible la primera vista previa de la versión 1.7.0. ¡Presentamos Kotlin 1.7.0-Beta! Algunos puntos destacados de este avance:

  • Cambios en la inferencia del compilador.
  • El retorno de las funciones de colección min() y max().
  • Estabilización de tipos definitivamente no anulables.
  • Actualizaciones para el nuevo gestor de memoria Kotlin/Native.

Instale la versión 1.7.0-Beta para probar estas funcionalidades e informe de cualquier incidencia que encuentre para ayudarnos a mejorar Kotlin 1.7.0.

Le hablaremos de otras funcionalidades geniales en próximos artículos. ¡Esté atento!

Instalar Kotlin 1.7.0-Beta

A partir de la versión 1.7.0, vamos a actualizar nuestra terminología de cadencia cambiando «Milestone» por «Beta». Esta decisión se debe a varias razones:

  • Queremos que la terminología de las compilaciones de Kotlin esté más alineada con la terminología estándar del ciclo de lanzamiento de software. Para ser más precisos, «Beta» significa que hemos terminado de añadir nuevas funcionalidades a esa versión específica y estamos estabilizándola. Aunque los cambios finales se aplicarán, incluyendo los cambios basados en sus comentarios.
  • Hace algún tiempo, los compiladores de la versión M producían código «prelanzamiento», lo que hacía que estas versiones fueran más difíciles de probar. Pero ya no es así. Queremos evitar cualquier confusión y hacer hincapié en que probar las versiones beta de Kotlin es un proceso sencillo y que el equipo de Kotlin recomienda encarecidamente.
  • Por último, pero no por ello menos importante, el término «Beta» en sí mismo es una llamada a recibir comentarios de la comunidad. Lo utilizamos para hacerle saber que queremos que comparta su opinión con nosotros.

Le invitamos a evaluar Kotlin 1.7.0-Beta y compartir sus comentarios con nosotros en YouTrack y Slack (si es nuevo miembro de Slack: solicite una invitación).

Cambios en la inferencia del compilador

La inferencia del compilador es un tipo especial de inferencia de tipo que es útil cuando se llama a funciones genéricas del compilador. Ayuda al compilador a inferir el tipo de argumentos de una llamada utilizando la información de tipo de otras llamadas dentro de su argumento lambda.

Kotlin 1.7.0-Beta incluye más cambios en la inferencia del compilador. Nos acerca a la estabilización de la inferencia del compilador y a la finalización de uno de los elementos de nuestra hoja de ruta.

Con esta versión, la inferencia del compilador se activa automáticamente si una inferencia de tipo regular no puede obtener suficiente información sobre un tipo sin especificar la opción del compilador -Xenable-builder-inference, que introdujimos en la versión 1.6.0.

Esto significa que ahora puede escribir sus propios compiladores que utilicen la inferencia de tipo del compilador sin aplicar ninguna anotación u opción adicional. Aprenda a escribir compiladores genéricos personalizados.

El retorno de las funciones de recogida min() y max()

En Kotlin 1.4, cambiamos el nombre de las funciones de colección min() y max() a minOrNull() y maxOrNull(). Estos nuevos nombres reflejan mejor su comportamiento: devuelven null si la colección de receptores está vacía. También ha ayudado a alinear el comportamiento de las funciones con las convenciones de nomenclatura utilizadas en toda la API de colecciones de Kotlin.

Lo mismo ocurrió con minBy(), maxBy(), minWith() y maxWith(), que obtuvieron sus sinónimos *OrNull() en Kotlin 1.4. Las funciones antiguas afectadas por este cambio se han ido eliminando gradualmente.

Kotlin 1.7.0-Beta vuelve a introducir los nombres originales de las funciones, pero con un tipo de retorno no anulable. Los renovados min(), max(), minBy(), maxBy(), minWith() y maxWith() ahora devuelven estrictamente el elemento de la colección o lanzan una excepción.

Consulte esta incidencia de YouTrack para obtener más detalles.

Estabilización de tipos definitivamente no anulables

Kotlin 1.7.0 contará con tipos estables definitivamente no anulables, que se introdujeron en Kotlin 1.6.20.

Estos tipos se han añadido para proporcionar una mejor interoperabilidad cuando se extienden las clases e interfaces genéricas de Java.

Desde Kotlin 1.6.20, se puede marcar un parámetro de tipo genérico como definitivamente no anulable en el lugar de uso con la nueva sintaxis T & Any. La forma sintáctica proviene de una notación de tipos de intersección y ahora se limita a un parámetro de tipo con límites superiores anulables en el lado izquierdo de & y Any no anulable en el lado derecho:

Los tipos definitivamente no anulables están habilitados por defecto en esta versión Beta. No tendrá que hacer nada más.

Descubra más sobre los tipos definitivamente no anulables en la sección KEEP.

Coincidencia con Regex en una posición determinada

Las funciones Regex.matchAt() y Regex.matchesAt(), introducidas en 1.5.30, son ahora estables. Proporcionan una forma de comprobar si una expresión regular presenta una coincidencia exacta en una posición concreta en una String o CharSequence.

  • matchesAt() busca una coincidencia y devuelve un resultado booleano:
  • matchAt() devuelve la coincidencia si se encuentra, o null si no se encuentra:

Le agradeceremos sus comentarios en esta incidencia de YouTrack.

Nuevo gestor de memoria Kotlin/Native

Continuamos recopilando opiniones sobre el uso y mejorando el nuevo gestor de memoria Kotlin/Native. Actualmente, puede probar la versión Alpha en sus proyectos. Kotlin 1.7.0-Beta incorpora nuevas mejoras de rendimiento que mejorarán la experiencia de los desarrolladores.

El nuevo gestor de memoria elimina las diferencias entre JVM y las plataformas nativas. Proporciona una experiencia coherente al desarrollador en proyectos multiplataforma. Por ejemplo, le resultará mucho más fácil crear nuevas aplicaciones móviles multiplataforma que funcionen tanto en Android como en iOS.

El nuevo gestor de memoria de Kotlin/Native elimina las restricciones para compartir objetos entre hilos. También proporciona primitivas de programación concurrente sin fugas que son seguras y no requieren ninguna gestión ni anotaciones especiales.

El nuevo gestor de memoria se convertirá en el predeterminado en futuras versiones, así que te animamos a que lo pruebes ahora. Obtenga más información sobre el nuevo gestor de memoria y explore los proyectos demo, o pase directamente a las instrucciones de migración para probarlo usted mismo.

Pruebe a utilizar el nuevo gestor de memoria en sus proyectos para ver cómo funciona y comparta sus comentarios en nuestro sistema de seguimiento de incidencias, YouTrack.

Compatibilidad con grupos de captura con nombre en JS y Native

Desde Kotlin 1.7.0-Beta, los grupos de captura con nombre se admiten no solo en la JVM (1.8 y posteriores) sino también en JS y Native.

Para asignar un nombre a un grupo de captura, utilice la sintaxis (?<name>group) en su expresión regular. Para obtener el texto coincidente con un grupo, llame a la nueva función MatchGroupCollection.get() y pase el nombre del grupo.

Recuperar el valor del grupo coincidente por su nombre

Considere este ejemplo para hacer coincidir las coordenadas de la ciudad. Para obtener una colección de grupos que coincidan con la expresión regular, utilice groups. Compare la recuperación del contenido de un grupo por su número (índice) y por su nombre mediante value:

Referencia de retorno con nombre

Ahora también se pueden utilizar los nombres de los grupos cuando se hace referencia a ellos. Las referencias de retorno coinciden con el mismo texto que previamente ha coincidido con un grupo de captura. Para ello, utilice la sintaxis \k<name> en su expresión regular:

Grupos con nombre en expresiones de sustitución

Por último, las referencias a grupos con nombre pueden utilizarse con expresiones de sustitución. Considere la función replace() que sustituye todas las apariciones de la expresión regular en la entrada por una expresión de sustitución, y la función replaceFirst() que sustituye solo la primera coincidencia.

Las ocurrencias de ${name} en la cadena de sustitución se sustituyen por las subsecuencias correspondientes a los grupos capturados con el nombre especificado. Compare los reemplazos en la referencia del grupo por nombre y por índice:

Pruebe nuevas funcionalidades y cuéntenos su opinión

Estas nuevas funcionalidades están disponibles en la versión de avance 1.7.0, Kotlin 1.7.0-Beta. Puede instalarla fácilmente en su IDE IntelliJ o Android Studio.

Debido al cambio de nombre de los complementos de Android Studio (Beta), la instalación de los complementos está disponible a partir de la versión 1.6.20.

Instale Kotlin 1.7.0-Beta de cualquiera de las siguientes maneras:

  • Si utiliza el canal de actualización Early Access Preview, el IDE le sugerirá la actualización automática a la versión 1.7.0-Beta en cuanto esté disponible.
  • Si utiliza el canal de actualización Stable, puede cambiar el canal a Early Access Preview en cualquier momento seleccionando Tools | Kotlin | Configure Kotlin Plugin Updates en su IDE. Ahora ya podrá instalar la última versión de avance. Consulte estas instrucciones para obtener más detalles.

Siempre puede descargar las versiones más recientes de estos IDE para beneficiarse de la amplia compatibilidad con Kotlin:

  • IntelliJ IDEA para el desarrollo de aplicaciones Kotlin para diversas plataformas.
  • Android Studio para desarrollar aplicaciones móviles Android y multiplataforma.

Una vez que haya instalado la versión 1.7.0-Beta, no olvide cambiar la versión de Kotlin a 1.7.0-Beta en sus scripts de compilación.

Si le surge algún problema:

Leer más

Artículo original en inglés de:

Luiz Di Bella

Danil Pavlov