Kotlin
A concise multiplatform language developed by JetBrains
Kotlin 1.5.30 est disponible!
Kotlin 1.5.30 étant la dernière version incrémentale avant Kotlin 1.6.0, elle comprend de nombreuses fonctionnalités expérimentales pour le langage et la bibliothèque standard que nous prévoyons de publier dans Kotlin 1.6.0. Essayez-les et faites-nous part de vos commentaires, vous pouvez vraiment influencer le résultat final ! Parmi ces fonctionnalités expérimentales, vous trouverez notamment les déclarations when
scellées, des modifications des exigences relatives à l’opt-in, l’instanciation des classes d’annotation et des améliorations des API stdlib Duration
et Regex
.
Avec Kotlin 1.5.30, vous bénéficiez également de la prise en charge native d’Apple Silicon, du backend Kotlin/JS IR en version bêta, de la possibilité d’utiliser des bibliothèques cinterop
personnalisées dans le code natif partagé des applications multiplateformes, de la prise en charge des chaînes d’outils Java fournie par le plugin Kotlin Gradle, et bien plus encore.
Faire la mise à jour vers Kotlin 1.5.30
Cet article donne un aperçu des mises à jour apportées par cette version :
- Améliorations du langage, avec notamment les déclarations
when
scellées, la prise en charge des fonctionssuspend
en tant que supertypes et des modifications des exigences en matière d’opt-in. - Améliorations pour Koltin multiplatform, avec notamment la possibilité d’utiliser des bibliothèques
cinterop
personnalisées dans du code natif partagé et la prise en charge de XCFrameworks comme format de sortie. - Améliorations Kotlin/JVM, avec notamment l’instanciation des classes d’annotation et la configuration améliorée de la prise en charge des annotations de nullabilité.
- Améliorations de Kotlin/Native, avec notamment la prise en charge native d’Apple Silicon et un DSL Kotlin amélioré pour le plugin Gradle CocoaPods.
- Améliorations pour Kotlin/JS IR, avec notamment le passage du backend JS IR en version bêta et une meilleure expérience de débogage pour le nouveau backend.
- Améliorations relatives à Gradle, avec notamment la prise en charge des chaînes d’outils Java qui facilite la définition explicite des arguments JVM pour le démon Kotlin.
- Améliorations de la bibliothèque standard pour les API
Duration
etRegex
.
Mise à jour automatique vers Kotlin 1.5.30
Si vous utilisez IntelliJ IDEA ou Android Studio, vous pouvez opter pour la mise à jour automatique de Kotlin vers sa nouvelle version.
Retrouvez les indications pour l’installation de Kotlin 1.5.30 à la fin de cet article.
Remarque : la dernière version d’IntelliJ IDEA (2021.2) ne prend pas en charge Kotlin 1.5.30. Si vous avez déjà effectué la mise à jour, vous pouvez facilement installer IntelliJ IDEA 2021.1 en utilisant l’application Toolbox App et utiliser Kotlin 1.5.30 dans cette version ou vous attendre la disponibilité de la version 1.5.31.
Langage
La feuille de route de Kotlin prévoit l’ajout de la prise en charge des déclarations when
scellées, les annotations d’opt-in, l’amélioration de l’inférence de type et la stabilisation de l’inférence du constructeur.
Kotlin 1.5.30 fournit un aperçu de ces fonctionnalités, dont la publication est prévue pour la version 1.6.0.
Déclarations when
scellées
Les when
scellées ont reçu plus de 280 votes dans YouTrack. Si vous activez cette fonctionnalité dans la version 1.5.30, le compilateur Kotlin vous avertira si l’une de vos déclarations when
n’est pas exhaustive. Cela permet d’améliorer la sécurité de votre code sans que vous ayez à introduire vos propres fonctions.
Essayez cette fonctionnalité et donnez votre avis dans ce ticket YouTrack.
Prise en charge des fonctions suspend
en tant que supertypes
Kotlin 1.5.30 offre un aperçu de la possibilité d’utiliser des types fonctionnels suspend
comme super interfaces, bien qu’il y ait encore quelques limitations. C’est l’une des pièces manquantes dans la conception des coroutines de Kotlin.
Activez cette fonctionnalité, essayez-la et donnez votre avis dans ce ticket YouTrack.
Modifications des exigences en matière d’opt-in
Kotlin 1.5.30 marque une étape supplémentaire vers la publication des annotations d’opt-in :
- Présentation de nouvelles règles pour l’utilisation et la déclaration des annotations d’exigences d’opt-in sur différentes cibles.
- Exigence d’opt-in même pour les utilisations implicites d’une API expérimentale. Par exemple, si le type de retour de la fonction est marqué comme un élément d’API expérimental, l’utilisation de la fonction nécessitera un opt-in même si la déclaration n’est pas marquée comme nécessitant un opt-in explicitement.
Testez ces nouveautés et partagez vos retours dans ce ticket YouTrack.
En savoir plus sur les exigences en matière d’opt-in.
Amélioration de l’inférence de type sur les types génériques récursifs
Lorsque l’inférence de type sur les types génériques récursifs est activée, le compilateur de Kotlin 1.5.30 peut inférer un argument de type en se basant uniquement sur les limites supérieures du paramètre de type correspondant s’il s’agit d’un générique récursif. Cela permet de créer divers modèles avec des types génériques récursifs qui sont souvent utilisés en Java pour réaliser des API de constructeur.
Élimination des restrictions d’inférence du constructeur
Lorsque l’élimination des restrictions d’inférence du constructeur est activée, Kotlin 1.5.30 supprime supprime les limites d’inférence du constructeur. Vous pouvez non seulement spécifier l’information de type que l’inférence du constructeur peut déduire, mais également utiliser la fonction get
sur celle-ci. Par exemple, vous pouvez appeler get()
à l’intérieur d’un argument lambda de buildList()
sans arguments de type explicitement spécifiés.
Kotlin Multiplatform
Kotlin 1.5.30 apporte plusieurs améliorations pour Kotlin Multiplatform :
- Possibilité d’utiliser des bibliothèques
cinterop
personnalisées dans du code natif partagé, ce qui étend la possibilité de partager des bibliothèques dépendantes de la plateforme livrées avec Kotlin/Native. - Prise en charge de XCFrameworks comme format de sortie pour tous les projets Kotlin Multiplatform. XCFrameworks permet de regouper la logique pour toutes les plateformes et architectures cibles dans un seul paquet et il n’est pas nécessaire de supprimer les architectures inutiles avant de publier l’application sur l’App Store.
- Nouvelle configuration de publication par défaut pour les artefacts Android. Cette configuration sera compatible avec tout type de build (comme
debug
ourelease
) par défaut. Avant la version 1.5.30, les métadonnées générées par le plugin Gradlemaven-publish
lors de la publication d’une bibliothèque multiplateforme pour Android incluaient l’attribut de type de build pour chaque variante Android publiée. Cela le rendait compatible uniquement avec le même type de build que celui utilisé par l’utilisateur de la bibliothèque.
Kotlin/JVM
Avec Kotlin 1.5.30, Kotlin/JVM reçoit les mises à jour suivantes :
- Amélioration de la configuration de la prise en charge des annotations de nullabilité. Vous pouvez spécifier si le compilateur doit signaler une incohérence de nullabilité sur la base d’informations provenant de types spécifiques d’annotations de nullabilité. Découvrez comment activer cette amélioration et consultez la liste complète des annotations de nullabilité prises en charge, qui a été enrichie avec les annotations RxJava3.
- Instanciation des classes d’annotation. Si vous activez cette fonctionnalité, vous pouvez appeler les constructeurs de classes d’annotation dans toute partie du code pour obtenir une instance de résultat. Cette fonctionnalité couvre les mêmes cas d’utilisation que la convention Java qui permet l’implémentation d’une interface d’annotation. Apprenez-en plus sur l’instanciation des classes d’annotation dans ce KEEP.
Kotlin/Native
Kotlin 1.5.30 apporte les améliorations suivantes pour Kotlin/Native :
- Prise en charge native d’Apple Silicon. Vous pouvez désormais construire des applications sur du matériel basé sur Apple Silicon pour toutes les cibles prises en charge par les Mac Intel sans avoir à utiliser l’environnement de traduction Rosetta. Les nouvelles cibles introduites dans la version 1.5.30 (
macosArm64
,iosSimulatorArm64
,watchosSimulatorArm64
ettvosSimulatorArm64
) permettent d’exécuter nativement du code Kotlin sur Apple Silicon. - Amélioration du DSL Kotlin pour le plugin Gradle CocoaPods. Kotlin 1.5.30 améliore la configuration de CocoaPods en fournissant un nouveau format DSL pour les frameworks qui est identique à une définition de framework pour les cibles Apple. Vous pouvez définir s’il s’agit d’un type statique ou dynamique, activer l’exportation explicite des dépendances et l’integration de Bitcode, et configurer d’autres options.
- Interopérabilité expérimentale avec Swift 5.5 async/await. Apprenez-en plus sur l’état actuel de l’interopérabilité de Swift 5.5 et partagez vos commentaires dans ce ticket YouTrack.
- Abandon des liens vers les DLL sans bibliothèques d’importation pour MinGW (Windows). Cet arrêt est le résultat du passage à l’éditeur de liens LLD, qui apporte de meilleures performances et des améliorations. N’hésitez pas à nous faire part de vos remarques et de vos craintes concernant la transition vers l’éditeur de liens LLD sur ce ticket YouTrack.
- Amélioration du mappage Swift/Objective-C pour les objets et les objets compagnons. Il est désormais possible d’accéder aux objets et aux objets compagnons d’une manière plus intuitive pour les développeurs iOS natifs, en utilisant les propriétés
.shared
et.companion
.
Kotlin/JS
Kotlin 1.5.30 fournit les améliorations suivantes pour Kotlin/JS :
- Le backend du compilateur JS IR passe en version bêta. Pour faciliter votre migration vers le nouveau backend, vous pouvez consulter le guide de migration et utiliser le nouveau plugin IDE Kotlin/JS Inspection Pack, qui vous guident pour la réalisation des changements nécessaires directement dans IntelliJ IDEA.
- Une meilleure expérience de débogage pour les applications avec le backend Kotlin/JS IR, grâce à la génération de cartes source JavaScript. Vous pouvez désormais bénéficier de la prise en charge des points d’arrêt, du stepping et des traces de pile lisibles avec des références de source appropriées dans tout débogueur JavaScript. En savoir plus sur le débogage des applications Kotlin/JS.
Gradle
Kotlin 1.5.30 améliorer l’expérience utilisateur du plugin Gradle Kotlin avec les fonctionnalités suivantes:
- Prise en charge des chaînes d’outils Java. Gradle 6.7 a introduit la prise en charge des chaînes d’outils Java, qui permettent de sélectionner facilement un JDK pour la compilation d’un projet. Déclarez simplement la version dont vous avez besoin dans le script de build et Gradle s’occupe du reste. Il la trouve sur votre machine hôte ou la télécharge et l’installe si elle ne s’y trouve pas encore. Le plugin Gradle Kotlin prend en charge les chaînes d’outils Java pour les tâches de compilation Kotlin/JVM. Pour les versions 6.1-6.6 de Gradle, définissez un emplacement JDK avec l’interface
UsesKotlinJavaToolchain
. - Des moyens plus simples de spécifier explicitement les arguments JVM du démon Kotlin.. Si rien n’est spécifié pour le démon Kotlin, il hérite des arguments du démon Gradle. Désormais, vous pouvez aussi spécifier des arguments pour une tâche spécifique et pour l’extension Kotlin en une seule ligne dans
build.gradle.kts
ougradle.properties
.
build.gradle.kts
gradle.properties
Bibliothèque standard
Kotlin 1.5.30 apporte des améliorations aux API Duration
et Regex
de la bibliothèque standard :
Améliorations de l’API Duration
Comme indiqué dans la feuille de route des bibliothèques, nous allons stabiliser l’API Duration dans Kotlin 1.6.0. C’est donc la dernière occasion de l’essayer et de nous faire part de vos commentaires sur les modifications que vous souhaitez. Merci de partager vos commentaires dans ce KEEP.
Kotlin 1.5.30 offre un aperçu des améliorations de l’API. La sortie de Duration.toString()
est maintenant plus lisible. Par exemple, Duration.minutes(920).toString()
produit 15h 20m
au lieu de 920m
.
Une durée négative est désormais précédée d’un signe moins (-
) et est entourée de parenthèses si elle est constituée de plusieurs éléments : -12m
et -(1h 30m)
.
Cette version fournit également un aperçu de nouvelles fonctions pour l’analyse syntaxique de Duration à partir de String :
parse()
analyse les objets Duration à partir de chaînes formatées comme lestoString()
de Duration ou à partir de chaînes représentant des durées ISO 8601 (comme les sortiestoIsoString()
).parseIsoString()
analyse les objets Duration à partir de chaînes représentant des durées ISO 8601.- Équivalents
*OrNull()
pour les deux fonctions.
Améliorations de l’API Regex
Kotlin 1.5.30 fournit de nouvelles fonctions expérimentales pour les expressions régulières :
matchesAt()
vérifie si une expression régulière a une correspondance dans la position spécifiée d’une chaîne.matchAt()
renvoie la correspondance si elle a été trouvée.
splitToSequence()
est une fonction différée desplit()
. Elle divise la chaîne autour des correspondances de l’expression régulière donnée, mais renvoie le résultat sous forme deSequence
. Une fonction similaire a également été ajoutée àCharSequence
.
Comment installer Kotlin 1.5.30
Si vous utilisez IntelliJ IDEA ou Android Studio, votre IDE vous proposera de faire la mise à jour vers Kotlin 1.5.30 automatiquement. Vous pouvez également faire la mise à jour manuellement en suivant ces instructions.
Vous pouvez télécharger les dernières versions des IDE suivants pour bénéficier d’une prise en charge étendue pour Kotlin :
- IntelliJ IDEA – pour développer des applications Kotlin pour différentes plateformes.
- Android Studio – pour le développement d’applications mobiles Android et multiplateformes.
Assurez-vous aussi de mettre à jour les bibliothèques kotlinx vers des versions compatibles et de spécifier la version 1.5.30 de Kotlin dans les scripts de build de vos projets existants.
Si vous avez besoin du compilateur de ligne de commande, il peut être téléchargé à partir de la page GitHub de la version.
En cas de problème
- Trouvez de l’aide sur Slack (recevoir une invitation).
- Signalez les problèmes dans notre outil de suivi YouTrack.
Tenez-vous au courant des dernières fonctionnalités de Kotlin ! Inscrivez-vous en remplissant le formulaire à droite de cet article pour recevoir les actualités relatives à Kotlin.
En lire et en voir plus
- Vidéo Nouveautés de Kotlin 1.5.30
- Docs sur les Nouveautés de Kotlin 1.5.30
- Article de blog sur Kotlin 1.5.20
- Article de blog sur Kotlin 1.5.0
- Feuille de route de Kotlin
Contributeurs externes
Nous remercions tous nos contributeurs externes dont les requêtes pull ont été incluses dans cette version :
Jinseong Jeon, pyos, Tianyu Geng, Mark Punzalan, Mads Ager, Ivan Gavrilovic, Steven Schäfer, Vladimir Ivanov, Hung Nguyen, Matthew Gharrity, Jiaxiang Chen, Ivan Kochurkin, Iaroslav Postovalov, Toshiaki Kameyama, Udi Cohen, Xin Wang, bracadabra