Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Kotlin 1.4-M3 est disponible : la Preview apporte des modifications de la bibliothèque standard
à l'instar de l'ajout des interfaces fonctionnelles

Le , par Stéphane le calme

180PARTAGES

10  0 
JetBrains a présenté la dernière étape de la preview de Kotlin 1.4 : la version 1.4-M3.

Les artefacts de la bibliothèque standard comprennent désormais des descripteurs module-info

Depuis Java 9, vous pouvez modulariser votre application grâce au projet Jigsaw. L’outil jlink vous permet de générer une image Java runtime personnalisée contenant uniquement les modules de la plateforme qui sont nécessaires pour votre application. Auparavant, il était possible d’utiliser jlink avec les artefacts de bibliothèque standard de Kotlin, mais il fallait utiliser des artefacts séparés (ceux avec le classificateur "modular") et la configuration n’était pas simple. L’impossibilité d’inclure des descripteurs de modules dans les principaux artefacts était due à des problèmes liés à l’outillage d’Android, qui sont maintenant résolus.

Kotlin 1.4 ajoute les informations du module module-info.java aux artefacts de bibliothèque standard par défaut, afin que vous puissiez les utiliser facilement avec jlink. Sous Android, veillez à utiliser le plugin Android Gradle version 3.2 ou supérieure, qui peut traiter correctement les fichiers jar avec module-info.

Interfaces fonctionnelles dans la bibliothèque standard

Le concept d'interface fonctionnelle a été introduit dans Java 8 ; il permet de définir une interface disposant d'une unique méthode abstraite, c'est-à-dire une seule méthode ne possédant pas d'implémentation par défaut.

Kotlin 1.4 prend en charge les conversions SAM pour les classes Kotlin. Vous pouvez marquer une interface ayant une seule méthode abstraite comme fun interface, puis passer un lambda comme argument lorsque cette interface est attendue comme paramètre. Dans la bibliothèque standard, les interfaces suivantes sont désormais déclarées comme fun interface :
  • Comparator
  • ReadOnlyProperty
  • PropertyDelegateProvider (qui a été introduit dans la version 1.4-M2)


Vous pouvez utiliser un constructeur SAM qui prend un lambda comme paramètre pour créer une instance. Le code qui en résulte est bien plus simple :


Opérations de collections
  • Une nouvelle fonction sumOf prend une fonction de sélecteur et renvoie une somme de ses valeurs sur tous les éléments d’une collection. Elle est assez similaire aux fonctions existantes sumBy et sumByDouble. La principale différence est que la nouvelle fonction sumOf accepte des sélecteurs avec différents types de retour, ce qui permet de traiter les sommes de différents types de la même manière. Plus précisément, sumOf produit des sommes des types Int, Long, Double, UInt, ULong. Sur la JVM, BigInteger et BigDecimal sont également disponibles.
  • Les fonctions min et max ont été renommées en minOrNull et maxOrNull. Depuis leur introduction dans la version 1.0, min et max ont renvoyé null pour les collections vides. Ceci est contraire à la convention de nommage utilisée dans l’API des collections de Kotlin : les fonctions sans le suffixe *OrNull lèvent une exception si la collection réceptrice est vide. Pour obtenir un null à la place, vous devez utiliser la version *OrNull de la fonction, par exemple firstOrNull.
    JetBrains a donc décidé de modifier progressivement le comportement de min et max. Dans la version 1.4-M3, l'éditeur ajoute minOrNull et maxOrNull comme synonymes de min et max et démarre le cycle de révision pour min et max, en vue de les réintroduire avec des types de retour non null.
  • JetBrains a introduit les fonctions minOf et maxOf qui renvoient la valeur minimale ou maximale de la fonction de sélecteur donnée sur les éléments de la collection. Ces fonctions apportent une solution à la situation dans laquelle il était nécessaire d’écrire map { selector }.max()!! ou maxBy { selector }!!.selector (ou min et minBy).

    Par souci de cohérence avec l’API existante, l'éditeur a également ajouté minOfWith et maxOfWith, qui prennent un Comparator comme argument.

    Les quatre nouvelles fonctions suivent la convention non-null qui est décrite ci-dessus : elles lancent des exceptions sur les collections vides et ont des versions *OrNull qui renvoient null dans ce cas.
  • De nouvelles surcharges pour flatMap et flatMapTo vous permettent d’utiliser des transformations avec des types de retour ne correspondant pas au type de récepteur, à savoir :
    • transformations en Sequence pour Iterable, Array et Map
    • transformations en Iterable pour Sequence
  • Une nouvelle fonction flatMapIndexed a été ajoutée comme contrepartie de flatMap. Comme vous le savez peut-être déjà, Indexed dans le nom d’une fonction de traitement de collection signifie que l’opération appliquée a l’index de l’élément comme paramètre.

Annotation @Throws commune

Bien que Kotlin n’ait pas d’exceptions vérifiées, il utilise l’annotation code>@Throws pour assurer l’interopérabilité avec les langages qui en ont, tels que Java et Swift. Auparavant, il y avait des annotations distinctes avec ce nom pour JVM (kotlin.jvm.Throws) et Native (kotlin.native.Throws). À partir de la version 1.4-M3, l’annotation @Throws est disponible dans la bibliothèque commune directement au sein du package kotlin (kotlin.Throws), ce qui vous permet de l’utiliser dans le code commun.


@Throws dans les fonctions de suspension pour Swift et Objective-C

Dans la version1.4-M1, l'éditeur a annoncé des changements relatifs au traitement des exceptions dans l’interop Objective-C/Swift : désormais, NSError n’est lancé que pour les exceptions qui sont des instances de classes spécifiées comme paramètres de l’annotation @Throws (ou leurs sous-classes). Dans la 1.4-M2, JetBrains a introduit une prise en charge basique des fonctions de suspension de Kotlin pour Swift et Objective-C. Avec la version 1.4-M3, il y a quelques changements dans le comportement des fonctions de suspension annotées avec @Throws :
  • Si vous avez un suspend fun annoté avec @Throws, vous devez spécifier CancellationException::class comme paramètre de l’annotation @Throws. Sinon, vous obtiendrez une erreur de compilation.
  • S’il n’y a pas d’annotation @Throws sur un suspend fun, il utilisera implicitement @Throws(CancellationException::class) lorsque vous l’appelez depuis Swift.

Conversion de KType en Java Type

Dans Kotlin 1.3.40, JetBrains a ajouté une fonction typeOf à la bibliothèque standard. Cette fonction renvoie une représentation d’exécution du type réifié donné T comme une instance de KType. Cependant, dans de nombreux cas d’utilisation concrets, vous devez travailler avec les objets java.lang.reflect.Type de Java reflection plutôt qu’avec KType. Il était déjà possible d’effectuer la conversion nécessaire, mais il fallait utiliser toute la dépendance kotlin-reflect. JetBrains a donc mis à jour la bibliothèque standard avec un moyen de convertir KType en Type Java – une propriété d’extension KType.javaType qui renvoie un Type Java :

Code Kotlin : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import kotlin.reflect.javaType 
import kotlin.reflect.typeOf 
  
@OptIn(ExperimentalStdlibApi::class) 
inline fun <reified T> accessReifiedTypeArg() { 
   val kType = typeOf<T>() 
   println("Kotlin type: $kType") 
   println("Java type: ${kType.javaType}") 
} 
  
@OptIn(ExperimentalStdlibApi::class) 
fun main() { 
   accessReifiedTypeArg<String>() 
   // Kotlin type: kotlin.String 
   // Java type: class java.lang.String 
  
   accessReifiedTypeArg<List<String>>() 
   // Kotlin type: kotlin.collections.List<kotlin.String> 
   // Java type: java.util.List<java.lang.String> 
}

Notez que jusqu’à présent, le Type Java obtenu ne se comporte pas correctement dans certains cas particuliers (comme les paramètres de type annotés ou la variance declaration-site), donc KType.javaType reste expérimental.

Compatibilité

Kotlin 1.4 n’est pas rétrocompatible avec la version 1.3 dans certains cas particuliers. Tous ces cas ont été soigneusement examinés par le comité du langage et seront répertoriés dans le guide de compatibilité.

Comment essayer les dernières fonctionnalités

Comme toujours, vous pouvez essayer Kotlin en ligne sur play.kotl.in.

Dans IntelliJ IDEA et Android Studio, vous pouvez mettre à jour le plugin Kotlin vers la version 1.4-M3. Il vous suffit de :
  1. Sélectionner Tools | Kotlin | Configure Kotlin Plugin Updates.
  2. Dans la liste des canaux de mise à jour, sélectionnez le canal Early Access Preview X, où X est la dernière version de Kotlin.
  3. Cliquez sur Vérifier à nouveau. La dernière version de build EAP apparaît.
  4. Cliquez sur Installer.

Si vous souhaitez travailler sur des projets existants qui ont été créés avant d’installer la version préliminaire, vous devez configurer votre build pour la version Prewiew dans Gradle ou Maven.

Vous pouvez télécharger le compilateur de ligne de commande sur la page Github de la version 1.4-M3.

Vous pouvez utiliser les versions suivantes des bibliothèques publiées avec cette version :

Source : JetBrains

Une erreur dans cette actualité ? Signalez-le nous !