Ces dernières années, Kotlin est devenu un langage populaire pour le développement Android. Créé par le fabricant d'outils logiciels JetBrains, Kotlin a fait ses débuts en 2011 et a atteint sa version 1.0 en 2016. L'année suivante, il a été adopté par Google comme un langage de première classe pour le développement Android et a été placé sous la gestion de sa propre fondation, financée par JetBrains et Google. Jusque-là, la plupart des applications Android étaient écrites en Java. En mai 2019, lors de sa conférence Google I/O, Google a commencé à encourager les développeurs Android à privilégier Kotlin plutôt que Java.
Et à la fin de l'année, le géant de la recherche a déclaré que 60 % des 1 000 principales applications Android contenaient du code Kotlin. Google justifie l'utilisation de Kotlin par le fait qu'il est plus concis, plus sûr, qu'il prend en charge la concurrence structurée pour faciliter le code asynchrone et qu'il est interopérable avec Java. Il se peut également que cela ait quelque chose à voir avec l'intendant de Java, Oracle, qui a passé plus d'une décennie à poursuivre (et finalement perdre) une plainte pour infraction contre Google concernant l'utilisation des API Java dans Android. La copie des API Java dans Android relèverait du « fair use ».
Cela signifie qu'elle n’était donc pas illégale. Kotlin est aujourd'hui en pleine croissance et Meta semble être tout aussi intrigué par le langage de programmation lancé par JetBrains. Comme l'explique Omer Strulovich, ingénieur logiciel chez Meta, l'entreprise a remplacé le code Java de plusieurs de ses applications Android populaires - Facebook, Instagram, Messenger, Portal et Quest - par Kotlin. « Il est logique que nous ayons transféré le développement Android de Meta vers Kotlin afin de rendre nos flux de travail de développement plus efficaces », a déclaré Strulovich dans un billet de blogue partagé lundi et portant sur la transition.
Strulovich poursuit en ces termes : « Kotlin est généralement considéré comme un meilleur langage que Java, avec des notes de popularité plus élevées que Java dans l'enquête annuelle de Stack Overflow auprès des développeurs. Nous avons également comparé la dernière version de Kotlin avec Java 11, qui est la dernière version pouvant être utilisée pour le développement Android ». Mais au-delà de sa popularité dans l'écosystème Android - qui, selon Strulovich, n'arrive pas à la cheville de Java, quelque part dans le top 3 des langages de programmation - Kotlin présente quelques avantages pratiques. Parmi ceux-ci, il cite :
- nullabilité : les exceptions liées aux pointeurs null seraient un problème courant chez Meta, comme partout ailleurs. « Nous sommes très bons pour les corriger avant de publier nos applications, mais le traitement de ces problèmes prend toujours beaucoup de temps. Nous utilisons des outils internes pour détecter plus tôt les problèmes de null safety, et nous annotons rigoureusement notre code dans le cadre de notre travail pour détecter plus tôt de tels problèmes en Java. Mais même avec cela, la gestion intégrée de la nullabilité de Kotlin est plus robuste et plus facile à utiliser », a déclaré Strulovich ;
- programmation fonctionnelle : la prise en charge par Kotlin des fonctions en ligne et des expressions lambda permettrait à Meta d'utiliser un style de programmation fonctionnelle sans compromettre la vitesse d'exécution. « Bien que Java 8 ajoute le support des lambdas et soit disponible pour Android, cela se fait au prix d'un plus grand nombre d'objets anonymes, ce qui affecte négativement les performances sur les appareils Android bas de gamme. L'outil Redex de Meta minimise ces problèmes, mais ils existent toujours, ce qui fait de Kotlin une meilleure alternative », explique-t-il ;
- un code plus court : la conception moderne de Kotlin rendrait son code plus court. Kotlin permet d'abandonner les types explicites (comme le fait Java 11) et, avec la bibliothèque standard, qui est basée sur le style fonctionnel mentionné ci-dessus, il raccourcit de nombreuses boucles répétitives en déclarations plus simples. Selon Strulovich, ce code plus court est également plus explicite, ce qui peut le rendre plus facile à suivre ;
- langage spécifique au domaine (DSL) / constructeurs à sécurité intrinsèque : il estime que les diverses fonctionnalités de Kotlin se rejoignent et permettent à Meta de définir un DSL. Il s'agit essentiellement d'un moyen de déplacer des définitions telles que les XML d'Android pour les implémenter directement dans le code Kotlin. Mais Strulovich ajoute que cet outil doit être manié avec précaution, car l'implémentation de DSL en Kotlin peut soit être utile, soit tourner à la suringénierie.
En outre, Strulovich note que la transition a également eu des inconvénients. Les bases de code mixtes peuvent être difficiles à maintenir et Kotlin, qui existe depuis moins longtemps que Java, dispose d'un ensemble d'outils moins mature. Redex, l'optimiseur de bytecode Android de Meta, a dû être mis à jour. Il en est de même pour Pygments, un surligneur syntaxique. En outre, certaines bibliothèques internes permettant d'optimiser le bytecode lors de la compilation ne fonctionnaient pas avec Kotlin et ont dû être mises à jour. Et de nouveaux outils comme Ktfmt, un formateur déterministe de Kotlin, ont dû être construits.
Meta aurait pu décider d'écrire uniquement du nouveau code en Kotlin, mais il a plutôt choisi de convertir toutes ses applications Android. « À ce jour, nos applications Android pour Facebook, Messenger et Instagram ont chacune plus d'un million de lignes de code Kotlin, et le taux de conversion ne cesse d'augmenter. Au total, notre base de code Android compte plus de 10 millions de lignes de code Kotlin », a déclaré Strulovich. Toutefois, il n'a pas précisé quand Meta a commencé la transition ni quel pourcentage du code de ses applications Android a été converti. Des sources indiquent que la migration a été amorcée l'année dernière.
À ce stade, Meta a annoncé avoir réalisé quelques gains. Par exemple, bien que le code Kotlin soit plus court, ce n'est peut-être pas autant qu'espéré. « En moyenne, nous avons constaté une réduction de 11 % du nombre de lignes de code grâce à cette migration. Nous avons vu des chiffres beaucoup plus élevés cités en ligne, mais nous soupçonnons que ces chiffres sont dérivés d'exemples spécifiques », note Strulovich. La faible réduction de code s'expliquerait en partie par le fait qu'une grande partie du code de l'application traduite consiste en des définitions d'interface utilisateur, qui restent les mêmes, qu'elles soient en Java ou en Kotlin.
Strulovich a déclaré qu'il n'y avait pas de régression en termes de vitesse, ce qui signifie que les applications converties ont au moins conservé leurs performances. La taille de construction des applications en Kotlin n'a pas non plus posé de problème. Strulovich a déclaré que la migration vers Kotlin est en cours et s'accélère. Entre-temps, la popularité de Java, selon l'index PYPL, a diminué de 4,7 % au cours des cinq dernières années.
« Kotlin ne dispose toujours pas de certains des outils et des optimisations auxquels nous nous sommes habitués en travaillant avec Java. Mais nous nous efforçons de combler ces lacunes. Au fur et à mesure que nous progressons, et de la maturation de ces outils et bibliothèques, nous nous efforcerons également de les mettre à la disposition de la communauté », a déclaré Strulovich.
Source : Meta
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous du choix de Meta pour ses applications Android ?
Selon vous, quel langage est le plus adapté au développement Android entre Kotlin et Java ?
Voir aussi
Android : Kotlin est désormais le langage préféré et recommandé par Google vers la fin de Java pour le développement Android ?
API Java dans Android : Oracle parvient à faire annuler la décision rendue en faveur de Google, la Cour d'appel rejette l'usage équitable des API
État de Kotlin Multiplatform : découvrez les résultats de l'enquête du 2e semestre de 2021 et participez à une nouvelle enquête sur le SDK Kotlin multiplateforme de JetBrains
La première préversion de Kotlin 1.7.0 est disponible : un aperçu des nouveautés et améliorations du langage de programmation