Early Access Program

Publication de Kotlin 1.7.0-Beta

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

La première préversion de Kotlin 1.7.0 est disponible. Découvrez Kotlin 1.7.0-Beta ! Voici quelques-unes des évolutions qu’elle apporte :

  • des modifications de l’inférence des constructeurs.
  • le retour des fonctions de collection min() et max().
  • la stabilisation des types définitivement non nullables.
  • des mises à jour pour le nouveau gestionnaire de mémoire Kotlin/Native.

Installez la version 1.7.0-Beta pour tester ces fonctionnalités et nous signaler tout problème afin de nous aider à améliorer Kotlin 1.7.0.

Nous vous en dirons plus sur d’autres fonctionnalités intéressantes dans de prochains articles. Restez à l’écoute !

Installer Kotlin 1.7.0-Beta

À partir de la version 1.7.0, nous mettons à jour notre terminologie concernant la cadence des publications en remplaçant « Milestone » par « Beta ». Voici les raisons de cette décision :

  • Nous souhaitons aligner la terminologie des builds de Kotlin sur la terminologie standard du cycle de publication logiciel. La mention « Beta » signifie que nous avons fini d’ajouter de nouvelles fonctionnalités à une version et que nous travaillons à sa stabilisation. Pour autant, cette version peut encore faire l’objet de modifications, notamment sur la base de vos retours d’expérience et commentaires.
  • Il y a quelque temps, les compilateurs M-release produisaient du code « pre-release », ce qui compliquait les tests de ces versions. Mais ce n’est plus le cas. Nous voulons éviter toute confusion et souligner qu’essayer les versions bêta de Kotlin est un processus simple et fortement encouragé par l’équipe Kotlin.
  • Enfin, le terme « Beta » lui-même est un appel aux retours d’expérience de la communauté. Il est utile pour vous informer que nous souhaitons recevoir vos commentaires.

Nous vous invitons à évaluer Kotlin 1.7.0-Beta et à nous faire part de vos commentaires sur YouTrack et Slack (pour les nouveaux membres de Slack : demandez à participer).

Modifications de l’inférence des constructeurs

L’inférence des constructeurs est un type particulier d’inférence de type, utile lors de l’appel de fonctions de constructeur génériques. Il aide le compilateur à inférer les arguments de type d’un appel en utilisant les informations de type sur les autres appels dans son argument lambda.

La version 1.7.0-Beta de Kotlin apporte de nouvelles modifications à l’inférence des constructeurs. Nous nous rapprochons ainsi de la stabilisation de l’inférence des constructeurs et de la réalisation de l’un des points de notre feuille de route.

Avec cette publication, l’inférence de constructeur est automatiquement activée si une inférence de type standard ne peut pas obtenir suffisamment d’informations sur un type sans spécifier l’option de compilation -Xenable-builder-inference, que nous avons introduite dans la version 1.6.0.

Vous pouvez donc maintenant écrire vos propres constructeurs qui utilisent l’inférence de type de constructeur sans appliquer d’annotations ou d’options supplémentaires. Apprenez à écrire des constructeurs génériques personnalisés.

Retour des fonctions de collection min() et max()

Dans Kotlin 1.4, nous avons renommé les fonctions de collection min() et max() en minOrNull() et maxOrNull(). Ces nouveaux noms reflètent mieux leur comportement : renvoyer null si la collection est vide. Cela a également permis d’aligner le comportement des fonctions sur les conventions de nommage utilisées dans l’API des collections Kotlin.

De même, minBy(), maxBy(), minWith() et maxWith() ont obtenu leurs synonymes *OrNull() dans Kotlin 1.4. Les anciennes fonctions affectées par ce changement ont été progressivement rendues obsolètes.

Kotlin 1.7.0-Beta réintroduit les noms d’origine des fonctions, mais avec un type de retour non nullable. Les nouvelles fonctions min(), max(), minBy(), maxBy(), minWith() et maxWith() retournent maintenant strictement l’élément de la collection ou lancent une exception.

Consultez ce ticket YouTrack pour plus de détails.

Stabilisation des types définitivement non nullables

Les types définitivement non nullables introduits dans Kotlin 1.6.20 seront stables dans Kotlin 1.7.0.

Ces types ont été ajoutés pour fournir une meilleure interopérabilité lors de l’extension des classes et interfaces Java génériques.

Depuis Kotlin 1.6.20, il est possible de marquer un paramètre de type générique comme définitivement non nullable sur le site d’utilisation avec la nouvelle syntaxe T & Any. La forme syntaxique provient d’une notation de types d’intersection. Elle est maintenant limitée à un paramètre de type avec des limites supérieures nullables sur le côté gauche de & et non-nullables Any sur le côté droit :

Les types définitivement non nullables sont activés par défaut dans cette version bêta. Aucune étape supplémentaire n’est requise.

Pour en savoir plus sur les types définitivement non-nullables, consultez le KEEP.

Correspondance avec une expression régulière (regex) à une position particulière

Les fonctions Regex.matchAt() et Regex.matchesAt(), introduites dans la version 1.5.30, sont maintenant stables. Elles permettent de vérifier si une expression régulière a une correspondance exacte à une position particulière dans une String ou CharSequence.

  • matchesAt() recherche une correspondance et renvoie un résultat booléen :
  • matchAt() renvoie la correspondance si elle est trouvée, ou renvoie null si elle ne l’est pas :

N’hésitez pas à nous faire part de vos retours dans ce ticket YouTrack.

Nouveau gestionnaire de mémoire Kotlin/Native

Nous continuons à collecter les retours en vue d’améliorer le nouveau gestionnaire de mémoire Kotlin/Native. Vous pouvez actuellement essayer la version Alpha dans vos projets. Kotlin 1.7.0-Beta apporte de nouvelles améliorations de performance qui permettront d’améliorer l’expérience de développement.

Le nouveau gestionnaire de mémoire élimine les différences entre les plateformes JVM et Native. Il offre une expérience de développement cohérente dans les projets multiplateformes. Il vous sera par exemple beaucoup plus facile de créer de nouvelles applications mobiles multiplateformes fonctionnant à la fois sur Android et iOS.

Le nouveau gestionnaire de mémoire Kotlin/Native lève les restrictions sur le partage d’objets entre les threads. Il fournit également des primitives de programmation concurrente sans fuite qui sont sûres et ne nécessitent aucune gestion ou annotation spéciale.

Le nouveau gestionnaire de mémoire deviendra le gestionnaire par défaut dans les futures versions, nous vous encourageons donc à l’essayer dès maintenant. Apprenez-en davantage sur le nouveau gestionnaire de mémoire, découvrez des projets de démon ou allez directement aux instructions de migration pour l’essayer.

Essayez d’utiliser le nouveau gestionnaire de mémoire dans vos projets pour découvrir son fonctionnement et partagez vos retours d’expérience dans notre outil de suivi des tickets, YouTrack.

Prise en charge des groupes de capture nommés en JS et Native

Depuis Kotlin 1.7.0-Beta, les groupes de capture nommés sont pris en charge non seulement sur la JVM (1.8 et plus) mais aussi sur JS et Native.

Pour donner un nom à un groupe de capture, utilisez la syntaxe (?<name>group) dans votre expression régulière. Pour obtenir le texte correspondant à un groupe, appelez la nouvelle fonction MatchGroupCollection.get() et envoyez le nom du groupe.

Récupérer la valeur du groupe correspondant par nom

Prenons l’exemple suivant pour faire correspondre les coordonnées d’une ville. Pour obtenir une collection de groupes correspondant à l’expression régulière, utilisez groups. Comparez la récupération du contenu d’un groupe par son numéro (index) et par son nom en utilisant value :

Référencement arrière nommé

Désormais, vous pouvez également utiliser les noms de groupe lors du référencement arrière de groupes. Les références arrière correspondent au texte précédemment obtenu par un groupe de capture. Pour cela, utilisez la syntaxe \k<name>  dans votre expression régulière :

Groupes nommés dans les expressions de remplacement

Enfin, les références de groupes nommés peuvent être utilisées avec des expressions de remplacement. Considérons la fonction replace() qui substitue toutes les occurrences de l’expression régulière dans l’entrée par une expression de remplacement, et la fonction replaceFirst() qui remplace uniquement la première correspondance.

Les occurrences de ${name} dans la chaîne de remplacement sont remplacées par les sous-séquences correspondant aux groupes capturés avec le nom spécifié. Comparez les remplacements dans la référence du groupe par nom et par index :

Essayez les nouvelles fonctionnalités et donnez votre avis

Ces nouvelles fonctionnalités sont disponibles dans la préversion 1.7.0, Kotlin 1.7.0-Beta. Vous pouvez facilement l’installer dans votre IDE IntelliJ IDEA ou Android Studio.

En raison du changement de nom des plugins Android Studio (Bêta), l’installation des plugins est disponible à partir des versions 1.6.20 et ultérieures.

Il y a plusieurs façons d’installer Kotlin 1.7.0-Beta :

  • Si vous utilisez le canal de mise à jour Early Access Preview, l’IDE vous propose automatiquement la mise à jour vers la version 1.7.0-Beta dès qu’elle est disponible.
  • Si vous utilisez le canal de mise à jour Stable, vous pouvez passer au canal Early Access Preview à tout moment en cliquant sur Tools | Kotlin | Configure Kotlin Plugin Updates dans votre IDE. Vous pourrez alors installer la dernière préversion. Consultez ces instructions pour en savoir plus.

Vous pouvez toujours 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 le développement d’applications Kotlin pour diverses plateformes.
  • Android Studio pour le développement d’applications mobiles Android et multiplateformes.

Une fois que vous aurez installé la version 1.7.0-Beta, n’oubliez pas de modifier la version de Kotlin en 1.7.0-Beta dans vos scripts de builds.

En cas de problème

En lire plus

Auteur de l’article original en anglais :

Delphine Massenhove

Danil Pavlov