Quoi de neuf dans Kotlin 1.6 ?  – CloudSavvy IT
Agence web » Actualités du digital » Quoi de neuf dans Kotlin 1.6 ? – CloudSavvy IT

Quoi de neuf dans Kotlin 1.6 ? – CloudSavvy IT

Kotlin 1.6 est sorti avec de nouvelles fonctionnalités, un gestionnaire de mémoire expérimental amélioré et une bibliothèque standard améliorée. Les ajouts aident à mûrir le langage multiplateforme et interdisciplinaire de plus en plus populaire de JetBrains.

Nouveau gestionnaire de mémoire natif

Le plus grand changement pour l’écosystème Kotlin est sans doute l’arrivée du nouveau gestionnaire de mémoire pour Kotlin Native. Bien qu’il soit toujours étiqueté comme un aperçu du développeur, le gestionnaire mis à jour est représentatif de la direction que prendra Kotlin à l’avenir.

La conception révisée est mieux équipée pour gérer les différents backends de compilation utilisés pour transformer Kotlin en code de plate-forme natif pour iOS et Android. Parfois, les plates-formes nécessitent des optimisations différentes pour une opération spécifique. L’approche actuelle impose des limitations sur la concurrence et peut créer des fuites de mémoire sans une attention particulière du développeur.

Le gestionnaire de mémoire de nouvelle génération résout ces lacunes. Il offre des primitives sans fuite pour les opérations simultanées qui peuvent être utilisées en l’état en toute sécurité. Les modifications apportent également une plus grande parité à la gestion de la mémoire native avec le gestionnaire de mémoire existant pour le développement JVM.

Bien que le nouveau système soit disponible dans Kotlin 1.6, il n’est actuellement pas destiné à une utilisation en production. Dans certaines situations, les performances peuvent être réduites jusqu’à 5 fois par rapport au gestionnaire de mémoire hérité. Les efforts de développement sont en cours sur une version performante prête pour une utilisation générale.

Déclarations lorsque scellées

Scellé when Les instructions vous permettent de recevoir un avertissement du compilateur lorsque vous oubliez de gérer un cas possible. Si vous passez une classe scellée, un type booléen ou une énumération dans un when, vous souhaiterez normalement suivre un plan d’action explicite pour chaque valeur d’entrée possible :

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

Dans l’exemple ci-dessus, le Drivetrain La classe scellée contient trois classes de données. le when L’instruction ne gère que deux d’entre eux – si votre code reçoit une transmission hybride, une valeur incorrecte sera renvoyée.

Le compilateur Kotlin va maintenant vous alerter de ce problème. Dans Kotlin 1.7, ne pas couvrir de manière exhaustive toutes les possibilités entraînera une erreur de compilation.

Suspension des transformations de type

Les transformations des types réguliers en types suspendus ont été stabilisées via des conversions automatiques du compilateur. Le compilateur crée automatiquement la conversion lorsque vous passez une expression de type régulier dans un contexte où un type suspendu est attendu.

Cela active un code comme celui-ci :

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

Ce code avait l’habitude de casser le deuxième flow.collect() appeler. le createUserFunction La variable fait référence à la définition de la fonction normale, et non à la suspension créée par le premier appel. Kotlin va maintenant gérer cela en créant une version suspendue lorsque le contexte de réception l’exige.

Les fonctions de suspension sont désormais également prises en charge en tant que supertypes. Cela vous permet de transmettre des classes qui implémentent des types fonctionnels de suspension partout où une référence de fonction de suspension est actuellement prise en charge.

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

le suspend () -> Unit l’interface est implémentée de la même manière que vous pouvez déjà utiliser () -> Unit pour les types non suspendus.

Scanner de couverture de code

Kotlin dispose désormais d’un outil officiel d’analyse de couverture de code. Kover est un plugin Gradle qui collecte les statistiques de couverture des tests pour les projets Kotlin JVM, multiplateformes et mixtes Java. Il peut générer des rapports aux formats HTML et XML.

Kover offre une compatibilité totale avec le langage Kotlin et sa chaîne d’outils Gradle. Bien que certains outils tiers puissent déjà fournir des scores de couverture, ils existent en dehors de l’écosystème et n’ont pas toujours une visibilité sur chaque tâche. Kover propose une approche totalement intégrée. Le développement est en cours avec cette version initiale étiquetée comme expérimentale.

Pour activer Kover, ajoutez les lignes suivantes à votre fichier de construction de niveau supérieur :

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

Kover fonctionnera désormais dans le cadre de vos builds Gradle.

Ajouts à la bibliothèque standard

Il y a quelques changements notables dans la bibliothèque standard, y compris la promotion de plusieurs fonctions bêta en stable :

readln() et readlnOrNull()

Ces deux nouvelles fonctions lisent et renvoient une ligne du flux d’entrée standard. Le premier lancera si la marque EOF a été atteinte alors que le second revient null.

Type de()

le typeOf() La fonction vous permet de déterminer le type réel d’un type réifié, généralement exprimé sous la forme T, à l’exécution.

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

Constructeurs de collections

De nouvelles fonctions de création vous permettent de créer facilement des collections à partir d’un ensemble de valeurs différentes. Vous pouvez combiner des cartes, des listes et des ensembles dans de nouvelles collections à l’aide de fonctions de première classe :

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

Valeurs de durée

le Duration La classe de représentation des valeurs temporelles a été promue à stable. Il fournit un type intégré pour stocker une durée de période dans votre code. La classe a des méthodes qui facilitent les conversions faciles entre les unités :

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

Plus de changements de bibliothèque standard

Les entiers ont un nouveau rotateLeft() et rotateRight() les fonctions. Ceux-ci font tourner la représentation binaire du nombre d’un nombre spécifié de bits dans les directions indiquées. Les expressions régulières obtiennent des fonctions de division de séquence et un comportement cohérent pour replace() et replaceFirst() dans les environnements Java et JavaScript.

Certaines fonctions existantes ont été dépréciées. le concat(), match(), et matches() fonctions sur les chaînes, ainsi que les sort() fonction sur les tableaux, émettra désormais des avertissements. Leur fonctionnalité est déjà couverte par des options alternatives.

Autres changements

Kotlin 1.6 ajoute quelques améliorations de l’écosystème et de la qualité de vie. Parmi ceux-ci se trouve la prise en charge de Xcode 13 et la possibilité de compiler des versions Windows sur n’importe quelle plate-forme. Si vous ciblez mingwX64 ou mingwX86 pour Windows, vous pouvez désormais compiler à partir de n’importe quel système prenant en charge le développement Kotlin/Native.

Les améliorations apportées aux caches du compilateur pour les versions Linux et iOS ont réduit de moitié les temps de construction typiques après la première exécution. Les mises à jour de la chaîne de dépendances Kotlin réduisent considérablement l’utilisation du disque. Le passage à LLVM 11.1 a réduit la version macOS de 1200 Mo à environ 300 Mo.

Si vous utilisez Kotlin JavaScript, vous pouvez désormais désactiver les téléchargements automatiques de Node.js et Yarn pendant le processus de construction. Ceci est utile lorsque vous compilez du code dans un environnement préconfiguré où l’hôte a déjà ces dépendances installées.

Résumé

Kotlin 1.6 est une version saine avec de nouvelles fonctionnalités expérimentales ouvrant la voie à suivre et une bonne liste de changements de langage et de bibliothèque standard que vous pouvez utiliser aujourd’hui. Des améliorations ont également été apportées à l’interopérabilité entre les versions de Kotlin, de sorte que davantage de code se comportera de la même manière, qu’il soit compilé pour JVM, Native ou JavaScript.

Le jalon 1.6 voit également les responsables de Kotlin offrir une période de support prolongée pour les anciennes versions d’API. Trois versions précédentes seront désormais prises en charge sur une cadence de roulement. Cela signifie que vous pouvez actuellement choisir de développer contre les versions Kotlin 1.3 à 1.6, ce qui vous laisse plus de temps pour mettre à niveau entre les versions.

Vous pouvez passer à Kotlin 1.6 dès aujourd’hui en mettant à jour votre version d’IntelliJ IDEA, Android Studio, Xcode ou le compilateur Kotlin CLI. Cela vaut la peine de consulter d’abord le guide de compatibilité pour vous assurer que vous avez résolu toutes les dépréciations signalées précédemment qui généreront des avertissements ou des erreurs dans la version 1.6.

★★★★★