La version 1.2 du langage statiquement typé Kotlin, une version de Java approuvée par Google pour le développement d'applications Android, comporte une fonction expérimentale permettant la réutilisation de code sur toutes les plateformes et offre la compatibilité avec le système modulaire de Java 9.

Les nouvelles fonctions de Kotlin 1.2

La fonction expérimentale de Kotlin pour les projets multiplateformes permet aux développeurs de réutiliser le code entre les plates-formes cibles prises en charge : d’abord JVM et JavaScript, et ensuite natives. Le code à partager entre plateformes est placé dans un module commun ; les éléments dépendants de la plateforme sont placés dans des modules spécifiques à la plate-forme. Pendant la compilation, le code est produit à la fois pour les éléments communs et les éléments spécifiques à la plate-forme.

Les développeurs peuvent exprimer les dépendances du code commun sur les éléments de code spécifiques à la plate-forme via les déclarations attendues et réelles. La déclaration attendue désigne une API spécifique, tandis que la déclaration réelle sera soit spécifique à la plate-forme de l'API soit un alias de type faisant référence à une implémentation existante de l'API dans une bibliothèque externe. La bibliothèque standard, quant à elle, inclut le paquet kotlin.math pour effectuer les opérations mathématiques dans le code multi-plateforme. Désormais également, le paquet kotlin.math offre plus de précision pour les prothèses d'émulation mathématiques (polyfills) pour JavaScript.

Un compilateur revu 

La bibliothèque standard de Kotlin 1.2 est compatible avec le système modulaire de Java 9, lequel interdit de diviser les paquets (plusieurs fichiers .jar déclarant des classes dans le même paquet). Dans Kotlin 1.2, les artefacts kotlin-stdlib-jdk7 et kotlin-stdlib-jdk8 remplacent les anciens kotlin-stdlib-jre7 et kotlin-stdlib-jre8. Pour assurer la compatibilité Java 9, Kotlin 1.2 a également retiré les déclarations obsolètes du paquet kotlin.reflect de la bibliothèque kotlin-reflect. Les développeurs doivent utiliser les déclarations du paquet kotlin.reflect.full, apparu dans Kotlin 1.1. 

Parmi les améliorations d'inférence de type apportées à Kotlin 1.2, on peut citer la possibilité d’activer le compilateur pour utiliser les informations provenant des types Casts dans l'inférence de type. Si un développeur appelle une méthode générique qui renvoie un paramètre de type, T par exemple, et convertit la valeur de retour en un type spécifique, tel que Foo, le compilateur comprend maintenant que le T de cet appel doit être lié au type Foo. Cette fonction est particulièrement importante pour les développeurs Android s’ils veulent que le compilateur Kotlin analyse correctement les appels findViewById dans l’API Android Level 26. En outre, le compilateur comporte désormais une option pour traiter toutes les alertes comme des erreurs. 

Les autres améliorations apportées à Kotlin 1.2

- Kotlin 1.2 prend désormais en charge les comparaisons à valeurs multiples « array literals » dans les annotations, ce qui simplifie le codage.

- Kotlin 1.2 utilise une syntaxe plus cohérente.

- La nouvelle API Reflection permet aux développeurs de vérifier si une variable lateinit a été initialisée.

- Le modificateur lateinit peut maintenant être utilisé sur les propriétés de niveau supérieur et les variables locales. 

À l’origine, Kotlin est un langage permettant de compiler pour la JVM, mais ses fonctions ont été élargies pour compiler aussi en JavaScript. Au printemps dernier, Google a approuvé Kotlin comme langage de programmation de base pour construire des applications mobiles Android, aux côtés de Java. 

Kotlin 1.2 est livré avec l'IDE IntelliJ Idea 2017.3 de JetBrains disponible depuis aujourd’hui. Les utilisateurs de l'IDE Android Studio ou d'une ancienne version d'IntelliJ peuvent mettre à jour la nouvelle version via le menu du plug-in Kotlin Outils> Kotlin> Configurer les mises à jour.