Java VS Kotlin pour une application mobile Android en 2019

Comparatif Java VS Kotlin pour le développement d’une application mobile en 2019.
thomasD.jpg
Thomas DA ROCHAMis à jour le 6 Nov 2019
AXOPEN_Blog_Java_Kotlin.jpg

Avis à tous les amoureux du développement mobile : le célèbre JavaLangage de développement très populaire ! n'est plus l'unique langage utilisé pour développer des applications natives sur AndroidAndroid est un système d'exploitation mobile basé sur Linux. ! Depuis 2017, Google a lancé son nouveau langage : Kotlin! Cette nouvelle techno a pour principal objectif de remplacer le Java à long terme, et pour cause, la techno vous réserve des (bonnes) surprises !

A ce jour (Novembre 2019), sachez que vous pouvez réaliser des applications natives Android soit avec Java, soit avec KotlinLangage de programmation permettant de développement des applications mobiles Android natives.… et même en combinant les 2 langages (cela dit, on ne vous le conseille pas par souci de lisibilité projet :) ).

Après avoir testé et éprouvé plusieurs applications Android en Java et en Kotlin, on vous propose aujourd'hui de confronter notre expérience des deux langages sur plusieurs points :) C'est parti pour le versus pour le développement natif Android : Java VS Kotlin !

Préambule : Android Studio

Impossible de faire un comparatif Java VS Kotlin sans parler d'Android Studio ! Android Studio est la principale solution pour développer un projet sur Android. Actuellement, Android Studio est maintenu par JetBrains... tout comme Kotlin ! De fait, l'IDEEnvironnement de développement permettant de faciliter le développement d'applications. est de plus en plus tourné vers le nouveau langage, et pousse régulièrement à son adoption avec le développement de nouveaux outils, quitte à laisser Java de côté…

Principales différences entre Java et Kotlin

On l'a dit quelques lignes plus haut, Kotlin a pour but ultime de remplacer Java. Pour comprendre les différences qu'il existe entre ces deux langages, nous nous appuierons sur les bases du Java et analyserons ce que Kotlin y ajoute, modifie, remplace ou supprime.

Les types primitifs

Présents dans le langage Java, les types primitifs (types de données non objet) ne sont plus présents chez Kotlin ! Kotlin se veut être un langage exclusivement objet ! Et pour cause, ce nouveau système permet la gestion des 'NULL' : cela signifie qu'on peut définir si un objet peut être NULL, ou non. Dans le cas où l'objet peut être NULL, on peut le gérer.

La gestion des listes

En Kotlin, une liste peut ne pas être modifiable et donc être accessible seulement en lecture. L'opérateur ternaire de Java disparaît pour être remplacé par des structures conditionnelles retournant des valeurs (if/else, …).

Les attributs

En Kotlin, il est désormais possible de rajouter des fonctions à des objets mais, pas de rajouter l'attribut sans créer une classe qui étendait l'objet.

Tous les attributs présents dans le constructeur par défaut d'une classe sont publiques. Il est néanmoins possible de rendre le setter privé. En revanche, tout attribut présent ailleurs peut être privé.

Les data class : encore une nouveauté Kotlin !

Avec Kotlin, il est possible de créer des 'data class' ! Cela permet de créer des classes qui redéfinissent automatiquement les fonctions 'equals, hashCode, toString et copy'. Ces data class offrent aussi la possibilité de récupérer chaque attribut indépendamment dans des variables.

Côté fonctionnalités et nouveautés, Kotlin a bien travaillé pour nous rendre la vie plus facile… et ce n'est pas tout !

Environnement : librairies & communauté !

Pour faciliter le développement sur mobile Android, on peut faire appel à de nombreuses librairies open sources ! Toutes ces librairies sont compatibles avec des projets développés en Java. Kotlin étant bien plus jeune, certaines librairies "historiques" ne sont pas (ou du moins pas totalement) compatibles avec le langage.

Par exemple, la librairie GreenDAO qui est un ORM pour les bases de données SQLite sur Android, ne prend pas en charge les objets Kotlin. Il faut forcément que les objets soient en Java pour pouvoir l'utiliser (pour les objets en lien avec la librairie).

Et la jeunesse de Kotlin ne se fait pas ressentir qu'au niveau des librairies… Le manque d'informations et d'aide de la communauté pour le moment est aussi notable. En effet, ce n'est pas rare que lorsqu'on recherche une solution sur le web, les seules réponses qu'on obtient ne soient pas totalement fonctionnelles. Ce qui est bien moins souvent le cas sur Java :)

Pour le moment, l'historique et la communauté plus importante de Java joue en sa faveur ! Cependant, ça tend à changer rapidement, Kotlin rattrape son retard à une vitesse phénoménale !

Prise en main des langages

Inspirée de différents langages récents (et se basant sur Java), la syntaxe de Kotlin est relativement simple à prendre en main. Elle est même, de notre point de vue, bien plus facile à appréhender que le Java !

Kotlin, une syntaxe plus légère

Kotlin pallie à l'un des principaux défauts du Java : sa syntaxe excessivement lourde ! De ce côté, Kotlin s'en sort bien mieux ! Même s'il reprend les traits principaux du Java, il possède une syntaxe bien plus légère et une panoplie de fonctions faites pour alléger les programmes et accélérer le développement. C'est vraiment très appréciable !

Kotlin et la gestion des NULL : un vrai bonheur !

Un autre grand point faible du développement en Java est la gestion des "NULL", car, à elle seule, elle peut doubler la taille d'une classe. Ce qui surcharge le code et augmente le risque d'erreur.

Sur ce point, Kotlin débarque avec les objets "NULL" ou non (à la demande du développeur), et une gestion des "NULL" bien moins lourde syntaxiquement !

Attention tout de même avec les nouveautés de Kotlin ! Les nouvelles fonctionnalités, c'est génial mais certaines peuvent s'avérer dangereuses si elles sont mal utilisées. On peut citer par exemple les Coroutines ("mini thread").

En résumé, la prise en main est bien plus aisée sur Kotlin et les erreurs bien moins fréquentes... ce qui permet à Kotlin un léger avantage sur Java dans notre comparatif.

Performances

Côté performances, la différence entre ces deux langages n'est vraiment pas significative ! On ne peut pas dire que l'un prenne franchement l'ascendant sur l'autre.

La différence se trouve plutôt sur les facteurs qui influent sur les performances :

En Java, les performances d'une application sont liées principalement au développeur. Et oui, étant donné que les fonctions de Java sont limitées, c'est au développeur qu'incombe la responsabilité d'optimiser ses fonctions. Cela a pour effet que chaque fonction ne fait que le strict nécessaire (bien sûr, si le développeur fait bien son travail :) ).

Côté Kotlin, les performances d'une application sont davantage liées au compilateur ! En effet, Kotlin fournit beaucoup de fonctions, et toutes ces fonctions sont optimisées lors de la compilation. Ce qui d'ailleurs a pour effet d'augmenter le temps nécessaire pour générer le projet.

En finalité, comme c'est la machine virtuelle Java qui exécutera l'application, la mémoire sera gérée de la même manière.

Après faut-il avoir confiance en un développeur ou un compilateur ? Dur de choisir ;) !

Donc au niveau performances, les deux solutions sont équivalentes pour nous.

Maintenance

Et que deviendra votre projet dans 2, 3, 5 ans ? Parlons bien, parlons futur, parlons maintenance !

De notre point de vue, un projet développé en Java aura moins de chances de "péter" dans le futur comparé à Kotlin. Pourquoi ? Simplement parce qu'encore une fois, Kotlin est un jeune langage ! Aussi, il est fort probable qu'il évolue davantage et que des fonctions soient renommées, voir supprimées et d'autres ajoutées. Alors que, côté Java, on a moins de soucis à se faire côté évolutions !

En revanche, un projet en Kotlin aura plus de chances de trouver des développeurs intéressés pour maintenir le projet par la suite ! Car oui, si on considère la jeunesse syntaxique de Kotlin et sa proximité avec des syntaxes et des technologies récentes, les développeurs vont davantage se tourner vers ce type de langage ! Qui dit plus d'intérêt de la part des développeurs, dit aussi plus grande communauté ! Comparé à l'âge de Java, et aux attraits des nouvelles générations de développeurs, Kotlin devrait, si Google continue à soutenir ce langage, devenir plus facilement maintenable que le Java !

Conclusion

Pour résumé, le but premier de Kotlin est de remplacer Java pour le développement sur Android. Pour ce faire, ce nouveau langage vient colmater les principaux points faibles du Java au niveau développement... mais derrière, c'est toujours la machine virtuelle Java qui exécute le code !

Langage historique pour le développement Android, le Java possède une grande communauté expérimentée qui fait sa force ! Cependant, sa syntaxe liée à son âge est assez lourde (sans parler des "NullPointerException")... et n'attire plus les foules.

Kotlin, de par sa jeunesse, ne possède pas une communauté aussi veille et expérimentée. En revanche, il tire son épingle du jeu grâce à sa syntaxe bien plus concise et sa proximité avec les langages récents, qui en font une bien meilleure solution pour le développement sur Android aujourd'hui.

Java gagne par sa communauté, là où Kotlin gagne par son approche syntaxique légère et proche des langages récents.

Enfin, après avoir migré différents projets Android de Java à Kotlin et après avoir démarré de nouveaux projets directement en Kotlin, on peut aisément dire que Kotlin apporte davantage de stabilité, de confort et de vitesse de développement.

C'est pour toutes ces raisons que pour développer votre application Android, on vous conseille d'opter le langage Kotlin !