JavaRush /Blog Java /Random-FR /Renvoie un tableau de longueur nulle, non nul
alexnjc
Niveau 31

Renvoie un tableau de longueur nulle, non nul

Publié dans le groupe Random-FR
Il existe souvent des méthodes qui ressemblent à ceci :
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
Il n’y a aucune raison de considérer comme un cas particulier une situation dans laquelle il n’y a pas de fromage en vente. Cela nécessite que le client écrive du code supplémentaire pour traiter la valeur de retour de la méthode пull, par exemple :
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
au lieu de simple :
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
Ce type de verbosité est nécessaire pour presque tous les appels de méthode qui renvoient null au lieu d'un tableau de longueur nulle. Ceci est semé d'erreurs, car le développeur client n'a peut-être pas écrit de code spécial pour traiter le résultat null. L'erreur peut passer inaperçue pendant des années, car ces méthodes renvoient généralement un ou plusieurs objets. Il convient également de mentionner que le retour nullà la place d'un tableau entraîne une complication de la méthode elle-même qui renvoie le tableau. On fait parfois valoir que le retour de null est préférable au retour d'un tableau de longueur nulle, car cela évite les dépenses liées à l'allocation du tableau en mémoire. Cet argument échoue pour deux raisons. Premièrement, il ne sert à rien de s'inquiéter des performances à ce niveau, à moins que le profilage du programme ne montre que cette méthode particulière est la principale raison de la dégradation des performances. Deuxièmement, chaque appel à une méthode qui ne renvoie pas d'enregistrements peut transmettre le même tableau de longueur nulle au client, car tout tableau de longueur nulle est immuable et les objets immuables peuvent être partagés. En fait, c'est exactement ce qui se produit lorsque vous utilisez l'idiome standard pour transférer des éléments d'une collection dans un tableau contrôlé par type :
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
Dans cet idiome, une constante, sous forme de tableau de longueur nulle ,toArray est transmise à une méthode pour indiquer le type qu'elle doit renvoyer. Généralement, la méthode toArrayalloue de l'espace mémoire pour le tableau renvoyé, mais si la collection est vide, elle est placée dans le tableau d'entrée et la spécification Сollесtion,tоАггау(Оbjесt[])garantit que si le tableau d'entrée est suffisamment grand pour contenir la collection, c'est ce qui est renvoyé. Par conséquent, l’idiome présenté n’attribuera jamais lui-même un tableau de longueur nulle en mémoire, mais utilise une « constante spécifique au type » en tant que telle. Résumons. Il n’y a aucune raison pour qu’une méthode tableau renvoie null plutôt qu’un tableau de longueur nulle. Cet idiome semble provenir du langage de programmation C, où la longueur d'un tableau est renvoyée séparément du tableau lui-même. En C, il est inutile d’allouer de la mémoire à un tableau de longueur nulle. Source : Joshua Bloch, programmation efficace Java TM, maison d'édition Lori
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION