Bonjour,
j'ai une petite question concernant une codage simple mais pouvant soulever des questions :
Prenons par exemple la classe Conteneur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class Conteneur {
private String toto = "ma valeur";
private String truc = "un super truc";
private int quaranteDeux = 42;
..autres membres...
public String getToto() {
return toto;
}
public int getQuaranteDeux() {
return quaranteDeux;
}
public String getTruc() {
return truc;
}
...autre getters...
} |
Maintenant imaginons une deuxième et troisème classe :
1 2 3 4 5 6 7
| public class Fils {
private Conteneur plop = ...;
public Conteneur getPlop() {
return plop;
}
} |
et
1 2 3 4 5 6 7
| public class Pere {
private Fils monFils = ....;
public Fils getMonFils() {
return monFils;
}
} |
Maintenant imaginons que j'ai besoin des valeurs des membres de Conteneur pour en faire "quelque chose"
void faireQqChose(String toto, String truc, int quaranteDeux) {...}
Voici le problème : en imaginant que mes classes Pere, Fils et Conteneur "pèsent" en mémoire plus que juste ce que je viens de faire, et que les getters de chaque classe soient tels quels : càd ne prenant pratiquement pas de temps d'execution (par rapport par exemple à un getter qui irait chercher la valeur par ftp ou n'importe quelle autre méthode qui peut être nettement plus chronophage).
Comment appeler l'execution de "faireQqChose" ?
Méthode 1 :
faireQqChose(getMonFils().getPlop().getToto(), getMonFils().getPlop().getTruc(), getMonFils().getPlop().getQuaranteDeux());
Méthode 2 :
1 2
| Conteneur tmpPlop = getMonFils().getPlop();
faireQqChose(tmpPlop.getToto(), tmpPlop.getTruc(), tmpPlop.getQuaranteDeux()); |
Mon problème : es-ce que c'est plus optimisé de passer par un tmpPlop ou es-ce que le compilateur va mieux optimiser les get().get() à répétitions ?
Voici, c'est tout bête, mais j'ai tendance à utiliser la méthode 1 (des fois avec beaucoup plus d'intermédiaires) et les longues ne me gènent pas (ce n'est pas le problème de cette question) et peut être que finalement pour l'execution il vaux mieux utiliser la méthode 2.
Attention, l'aspect lisibilité du code ne m'interesse pas, seul les performance sont à étudier.
Autre chose : je sais que si j'avais à le coder en C++ je pense que je choisirais la méthode 2, pour des problèmes de taille de pile (limité), mais je suis un mauvais développeur C++.
As-t-on les mêmes problèmes pour le pile en java ?
Merci d'avance.
Partager