Java : inférence de type de variable locale

Java 10 a introduit une nouvelle fonctionnalité de langage appelée inférence de type de variable locale. Cette nouvelle fonctionnalité va nous permettre de faire face à deux situations où Java rend les choses difficiles pour les développeurs.

Lisibilité

Prenons le code suivant :

ArrayList<String> str = new ArrayList<String>();

Est-ce que le compilateur ne pourrait pas être assez intelligent pour savoir que je parle d'une liste de chaines de caractère ? C'est beaucoup de code pour pas grand-chose en fin de compte...

Si vous avez codé avec d'autres languages comme Javascript, Scala, Kotlin, C#, vous savez qu'ils ont tous une sorte d'inférence de type de variable locale.

Par exemple, Javascript a le mot-clé let et var, C# à aussi le mot-clé var et Scala et Kotlin ont var et val. Alors pourquoi pas Java ? Enfin, Java a le mot-clé var !

Exemple de var dans Java 10

Reprenons le code précédent avec le mot-clé var cette fois-ci :

var str = new ArrayList<String>();

admirez la différence :

ByteArrayOutputStream bos = new ByteArrayOutputStream();
var bos = new ByteArrayOutputStream();

Ambiguïté

Le type var ne peut pas être utilisé lorsque le type est ambigu. Le compilateur doit tout de même connaitre le type à certains endroits. Vous ne pouvez pas utiliser var dans la signature d'une fonction.

public int size(var list) { }

Vous ne pouvez pas utiliser les déclarations de variables locales sans une instance explicite. Vous ne pouvez pas utiliser la syntaxe var pour déclarer une variable sans valeur.

var x;

Vous ne pouvez pas non plus donner une valeur nulle à une variable var. Vous ne pouvez pas non plus utiliser var avec les expressions lambda. Elles nécessitent un type cible explicite.

var x = () -> {}

Nouveauté dans Java 11

Dans la version 11 de Java on peut à présent utiliser le mot-clé var dans une expression lambda comme ceci :

Addition add = (var x, var y) ->  x + y;

Cependant, on ne peut pas mélanger la syntaxe explicite et implicite. ainsi les exemples suivants ne compileront pas :

Addition add = (var x, int y) -> x + y;
Addition add = (var x, y) -> x + y;

Conclusion

var est une bonne nouveauté ajoutée à Java en matière de productivité et de lisibilité. Les futures versions de Java poursuivront l'évolution vers un language plus fonctionnel. Java devient donc de plus en plus lisible, concis et flexible.

En vidéo

Visionnez la présentation du mot-clé var.

Commentaires