Kotlin 1.7

Par:
fredericmazue

lun, 13/06/2022 - 15:27

JetBrains a annoncé la sortie 1.7 de Kotlin, son langage maison. Pour mémoire une des nouveautés majeures annoncées pour Kotlin 1.7 est l'évolution de l'inférence du générateur de type. Cette fonctionnalité aide le compilateur à déduire les arguments de type d'un appel en utilisant les informations de type sur les autres appels à l'intérieur de son argument lambda. Avec Kotlin 1.7 l'inférence de générateur de type 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 -Xenable-builder-inference du compilateur, qui a été introduite avec Kotlin 1.6. Cela signifie que vous pouvez désormais écrire vos propres générateurs qui utilisent l'inférence de générateur de type sans appliquer d'annotations ou d'options supplémentaires.

On remarquera encore l'arrivée de la version alpha du nouveau compilateur Kotlin K2. Ce nouveau compilateur vise à accélérer le développement de nouvelles fonctionnalités de langage, à unifier toutes les plates-formes prises en charge par Kotlin, à apporter des améliorations de performances et à fournir une API pour les extensions de compilateur.

Il est important de souligner qu'avec la version alpha du nouveau compilateur K2, l'éditeur JetBrains s'est principalement concentré sur l'amélioration des performances, et cela ne fonctionne que pour les projets JVM. Le compilateur K2 ne prend pour le moment pas en charge Kotlin/JS, Kotlin/Native ou d'autres projets multi plates-formes, et aucun des plugins de compilateur, y compris kapt, ne fonctionne avec lui. Cette restriction faite, JetBrains annonce des 'résultats remarquables', ce qui, selon les benchmark de l'éditeur signifie des performances plus que doublées.

On remarque enfin que les types définitivement non nullables ont été promus en stable dans Kotlin 1.7. Ces types offrent une meilleure interopérabilité lors de l'extension des classes et des interfaces Java génériques. Vous pouvez marquer un paramètre de type générique comme définitivement non nullable avec la nouvelle syntaxe T & Any. La forme syntaxique provient de la notation des types d'intersection et est maintenant limitée à un paramètre de type avec des bornes supérieures nullables sur le côté gauche de & et un non -nullable Any sur le côté droit :

fun <T> elvisLike(x: T, y: T & Any): T & Any = x ?: y
fun main() {
    // OK
    elvisLike<String>("", "").length
    // Error: 'null' cannot be a value of a non-null type
    elvisLike<String>("", null).length

    // OK
    elvisLike<String?>(null, "").length
    // Error: 'null' cannot be a value of a non-null type
    elvisLike<String?>(null, null).length
}