Vous avez dit bizarre…
Aujourd’hui, je me suis vu écrire en Java une méthode très pratique (si, si) qui consiste à retourner le paramètre d’entrée. method(a) { return a; }. À quoi pouvait donc servir cette méthode qui apparaît a priori bien inutile ?
Tout d’abord, parlons des tableaux, et plus particulièrement de leur création. Il existe une notation bien connue pour simplifier l’écriture d’un tableau : {item1, item2, ...}. Cependant, aussi pratique soit-il, ce raccourci syntaxique oblige à instancier une variable, même si le tableau est directement transformé par une méthode juste après. Je m’explique.
Java oblige par exemple à écrire :
String[] maMethode() { String[] temp = {"Mon", "tableau", "de", "chaînes"}; return temp; }
On aimerait pouvoir directement coder :
String[] maMethode() { return {"Mon", "tableau", "de", "chaînes"}; }
C’est là où intervient ma fonction étrange, qui est ainsi écrite :
T[] array(T... items) { return items; }
J’utilise la techniques des varargs qui permet de créer des méthodes supportant un nombre variable de paramètres. Lors d’un appel à une telle méthode, Java convertit les arguments donnés en un tableau aisément manipulable. Avec ma méthode ci-dessus, je profite de cette conversion pour transformer ce qui est un appel de méthode avec un nombre variable de paramètres en un tableau contenant ces paramètres. Je profite également des generics de Java pour typer correctement la méthode.
Ainsi, on peut maintenant écrire :
String[] maMethode() { return array("Mon", "tableau", "de", "chaînes"); }
Même si cette technique offre un beau raccourci pour le développeur, je doute cependant de ses performances. On remplace en effet la création d’un tableau de taille connue à la compilation par un appel de méthode et une création de tableau, sans compter la partie generics et les vérifications de types qui peuvent avoir lieu un peu partout. Je suppose donc une nette baisse d’efficacité, mais je vais tout de même effectuer quelques mesures pour savoir quelle en est la proportion.
Edit : la réalité est toute autre. Après quelques tests, le compilateur semble effectuer lui-même le remplacement de l’ensemble des paramètres par le tableau, ce qui rend cette conversion aussi rapide que son équivalent écrit par le développeur, l’appel de méthode en moins. Les performances sont donc apparemment complètement similaires, à un appel de méthode près.
Edit 2 : Java fournit une syntaxe alternative pour la création dynamique de tableaux. Par exemple : return new String[] {”a”, “b”, “c”};