FeaturedNOTICIAS

¿Qué hay de nuevo en Kotlin 1.6? – CloudSavvy IT


Foto que muestra la superposición del logotipo de Kotlin en el código de computadora
Trismegist san / Shutterstock.com

Kotlin 1.6 salió con nuevas características, un administrador de memoria experimental mejorado y una biblioteca estándar mejorada. Las adiciones ayudan a madurar el lenguaje multiplataforma e interdisciplinario cada vez más popular de JetBrains.

Nuevo administrador de memoria nativa

Probablemente el mayor cambio para el ecosistema de Kotlin es la llegada del nuevo administrador de memoria para Kotlin Native. Aunque todavía está etiquetado como una vista previa del desarrollador, el administrador actualizado es representativo de la dirección que tomará Kotlin en el futuro.

El diseño revisado está mejor equipado para manejar los diferentes backends de compilación utilizados para transformar Kotlin en código de plataforma nativa para iOS y Android. A veces, las plataformas requieren diferentes optimizaciones para una operación específica. El enfoque actual impone restricciones de concurrencia y puede crear pérdidas de memoria sin una atención especial por parte de los desarrolladores.

El administrador de memoria de próxima generación aborda estas deficiencias. Ofrece primitivas sin pérdida para operaciones concurrentes que son seguras de usar tal como están. Los cambios también aportan una mayor paridad a la gestión de la memoria nativa con el administrador de memoria existente para el desarrollo de JVM.

Aunque el nuevo sistema está disponible en Kotlin 1.6, actualmente no está diseñado para uso en producción. En algunas situaciones, el rendimiento podría reducirse hasta 5 veces en comparación con el administrador de memoria heredado. Se están realizando esfuerzos de desarrollo en una versión de rendimiento lista para adopción general.

Sellado al declarar

Sellado when Las instrucciones le permiten recibir una advertencia del compilador cuando se olvida de manejar un posible caso. Si pasa una clase sellada, un tipo booleano o una enumeración en un when, normalmente querrá tomar una acción explícita para cada valor de entrada posible:

sealed class Drivetrain {
    data class Electric(val Power: Int) : Drivetrain()
    data class Diesel(val Power: Int) : Drivetrain()
    data class Hybrid(val Diesel: Drivetrain, val Electric: Drivetrain) : Drivetrain()
}
 
fun getTotalPowerKwh(drivetrain: DriveTrain) : Int {
    when (drivetrain) {
        is Drivetrain.Diesel -> drivetrain.Diesel.Power
        is Drivetrain.Electric -> drivetrain.Electric.Power
    }
}

En el ejemplo anterior, el Drivetrain la clase sellada tiene tres clases de datos en su interior. El when la instrucción maneja solo dos: si el código recibe una transmisión híbrida, se devolverá un valor incorrecto.

El compilador de Kotlin ahora le advertirá de este problema. En Kotlin 1.7, no cubrir completamente todas las posibilidades resultará en un error de compilación.

Suspensión de transformaciones de tipo

Las transformaciones normales a suspendidas se han estabilizado mediante conversiones automáticas del compilador. El compilador creará automáticamente la conversión cuando pase una expresión de tipo regular en un contexto donde se espera un tipo de suspensión.

Esto habilita un código como el siguiente:

fun createUser(name: String) {
    // ...
}
 
flow.collect(::createUser)
 
val createUserFunction = ::createUser
flow.collect(createUserFunction)

Este código se rompía por segundo flow.collect() llamar. El createUserFunction variable se refiere a la definición de la función regular, no a la suspensión creada por la primera llamada. Kotlin ahora manejará esto creando una versión suspendida cuando el contexto de recepción lo requiera.

Las funciones de suspensión ahora también se admiten como supertipos. Esto le permite pasar clases que implementan tipos funcionales de suspensión siempre que se admita actualmente una referencia a una función de suspensión.

class ImplementsSuspendingFunctionalType : suspend () -> Unit {
    override suspend fun invoke() { /* ... */ }
}

El suspend () -> Unit la interfaz se implementa de la misma manera que ya puedes usar () -> Unit para tipos no suspendidos.

Escáner de cobertura de código

Kotlin ahora tiene una herramienta de escaneo de cobertura de código oficial. Kover es un complemento de Gradle que recopila estadísticas de cobertura de prueba para Kotlin JVM, proyectos Java mixtos y multiplataforma. Puede generar informes en formato HTML y XML.

Kover ofrece compatibilidad total con el lenguaje Kotlin y su cadena de herramientas Gradle. Si bien es posible que algunas herramientas de terceros ya brinden puntajes de cobertura, existen fuera del ecosistema y no siempre tienen visibilidad de todas las empresas. Kover ofrece un enfoque completamente integrado. El desarrollo está en marcha con esta versión inicial etiquetada como experimental.

Para habilitar Kover, agregue las siguientes líneas a su archivo de compilación de nivel superior:

plugins {
     id("org.jetbrains.kotlinx.kover") version "0.4.2"
}

Kover ahora se ejecutará como parte de tus compilaciones de Gradle.

Adiciones a la biblioteca estándar

Hay algunos cambios notables en la biblioteca estándar, incluida la promoción de varias funciones beta a estable:

readln () y readlnOrNull ()

Estas dos nuevas funciones leen y devuelven una fila del flujo de entrada estándar. El primero lanzará si se ha alcanzado la marca EOF mientras que el segundo regresa null.

mas o menos()

El typeOf() La función le permite determinar el tipo real de un tipo reificado, generalmente expresado como T, en fase de ejecución.

inline fun <reified T> getTypeString() : String {
    val type = typeOf<T>()
    return type.toString()
}

Constructores de colecciones

Las nuevas funciones de creación le permiten crear fácilmente colecciones a partir de un conjunto de valores diferentes. Puede combinar mapas, listas y conjuntos en nuevas colecciones utilizando funciones de primera clase:

val fruits = listOf("apple", "banana");
val veg = listOf("carrot", "cabbage");
 
val groceries = buildList {
    add("milk")
    addAll(fruits)
    addAll(veg)
}
 
// ["milk", "apple", "banana", "carrot", "cabbage"]

Valores de duración

El Duration la clase para la representación de valores de tiempo se ha ascendido a estable. Proporciona un tipo integrado para almacenar un período de tiempo en el código. La clase tiene métodos que facilitan conversiones fáciles entre unidades:

// Emits 1.0
println(60.toDuration(DurationUnit.SECONDS).inMinutes);

Otros cambios a la biblioteca estándar

Los enteros tienen nuevos rotateLeft() Y rotateRight() funciones. Estos rotan la representación binaria del número por un número específico de bits en las direcciones indicadas. Las expresiones regulares obtienen funciones de división de secuencia y un comportamiento consistente para replace() Y replaceFirst() en entornos Java y JavaScript.

Algunas funciones existentes han quedado obsoletas. El concat(), match(), Y matches() funciones en cadenas, así como el sort() función en matrices, ahora emitirá advertencias. Su funcionalidad ya está cubierta por opciones alternativas.

Otros cambios

Kotlin 1.6 agrega algunas mejoras al ecosistema y mejoras en la calidad de vida. Estos incluyen soporte para Xcode 13 y la capacidad de construir compilaciones de Windows en cualquier plataforma. Si está apuntando mingwX64 o mingwX86 para Windows, ahora puede compilar desde cualquier sistema que admita el desarrollo Kotlin / Native.

Las mejoras en las memorias caché del compilador para las compilaciones de Linux e iOS han reducido los tiempos de compilación típicos a la mitad después de la primera ejecución. Las actualizaciones de la cadena de dependencia de Kotlin reducen significativamente el uso del disco. El cambio a LLVM 11.1 redujo la versión de macOS de 1200 MB a alrededor de 300 MB.

Si está utilizando Kotlin JavaScript, ahora puede deshabilitar las descargas automáticas de Node.js y Yarn durante el proceso de compilación. Esto es útil cuando se compila código en un entorno preconfigurado donde el host ya ha instalado estas dependencias.

Resumen

Kotlin 1.6 es una versión saludable con nuevas características experimentales que allanan el camino para el futuro y una buena lista de cambios de biblioteca y lenguaje estándar que puede usar hoy. También ha habido mejoras en la interoperabilidad entre las versiones de Kotlin, por lo que más código se comportará igual si está compilado para JVM, Native o JavaScript.

El hito 1.6 también ve a los mantenedores de Kotlin ofreciendo un período de soporte extendido para versiones anteriores de API. Ahora se admitirán tres versiones anteriores de forma progresiva. Esto significa que actualmente puede optar por desarrollar con las versiones 1.3 a 1.6 de Kotlin, lo que le da más tiempo para actualizar entre versiones.

Puede actualizar a Kotlin 1.6 hoy mismo actualizando su versión de IntelliJ IDEA, Android Studio, Xcode o el compilador CLI de Kotlin. Vale la pena revisar primero la guía de compatibilidad para asegurarse de que ha abordado todas las depreciaciones informadas anteriormente que generarán advertencias o errores en 1.6.

TE INTERESA>>  La decisión de Cristiano Ronaldo que facilitaría su salida del Manchester United

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba