L'autoboxing est un pur sucre syntaxique. La raison pour laquelle ils ont introduit ce sucre, c'est parce que un truc de ce genre est particulierement chiant a lire et a comprendre:
Integer a = new Integer(0);
Integer b = new Integer(42);
Integer c = new Integer(a.intValue() + b.intValue());
On pourrait se demander pourquoi ils n'ont pas ajouter des add/substract etc
Auquel cas on aurait Integer c = a.add(c);
Mon petit doigt me dit que c'est pour des raisons de clarte d'api.
Bref, ca ne change strictement rien a la facon dont les Number etaient manipules avant java5.
Comme les for(Object value : iterable) d'ailleurs.
Fait un
Integer a = null
int b = a + 1;
Ou un
List strings = null;
for(String string : strings){
System.out.println("brezilien");
}
Les deux vont te jeter un beau NPE.
Quand a la surcharge d'operateur, c'est un truc qui est a l'oppose de la philosophie Java (et de n'importe quel langage objet un tant soit peu coherent d'ailleurs).
Java est un langage entreprise.
Ca sert a faire des systemes couillu, crees par des equipes independantes qui ne communiquent pas forcement beaucoup, qui sont la colonne vertebrale d'une boite, qui vont generalement etre ecrit, deploye en prod et rester la pendant 10, 20, 30 ans.
On a un systeme au taff en prod depuis plus de 10 ans. Et il pourrait bien faire 10 ans de plus si le management avait pas decide de l'outsourcer.
Une des raisons de son adoption massive, c'est que le langage est tres simple, et tres explicite.
Tu files une methode Java a n'importe quel mec qui a deja tape du code, il comprendra instantanement ce que le code fait, et sans aucune ambiguite.
Tu peux pas clairement pas dire la meme chose de n'importe quel autre langage complexe, genre c++ ou pire, perl.
Je considere ca comme un prerequis fondamental pour faire du code de qualite. Un code de qualite se lit comme un livre, si faut passer son temps a sauter partout dans le code pour savoir si + n'a pas ete surcharge pour tel objet, mais pas pour tel autre, c'est pas vivable.
Dans une boite ou le systeme est critique et ou les devs peuvent etre parti depuis tres longtemps, ou une ssii ou le mec qui a commence le projet se retrouver parachute expert python 15 jours apres et part ailleurs, c'est tres important, ca permet de passer la patate chaude plus facilement.
Si un petit malin s'amuse a surcharger les operateurs, bon courage pour facilement comprendre ce que fait le code. Et t'ouvres la porte a de potentiels gros problemes de perf ou autres pour les gens qui utilisent tes classes.
Note que de toutes facons, surcharge des operateurs ou pas, ca changera pas grand chose, vu que tous les types de bases sont immutable en Java.
Et meme s'ils ne l'etaient pas, ce sont des objets, et les objets ne s'ajoutent pas entre eux.
Et si tu regardes les implems, les objets ne s'ajoutent pas entre eux, ca n'a aucun sens.
Tu vas me dire qu'on peut ajouter des strings en java, je te repondrais que non, c'est du pur sucre syntaxique la encore.
"toto" + "titi" sera compile en
new StringBuilder("toto").append("titi").toString().
Et c'est pour ca que concatener des chaines dans une boucle, c'est mal, m'voyeeez? Surtout avant java 5 ou il n'y avait que StringBuffer qui est synchronizee, c'est moins grave maintenant.
Et c'est aussi pour ca que passer par des StringBuilder pour concatener 3 chaines, c'est mal, m'voyeez?: ca rend le code moins lisible pour 0 gains.
If you can find a host for me that has a friendly parrot, I will be very very glad. If you can find someone who has a friendly parrot I can visit with, that will be nice too.
[^] # Re: Utiliser les tty
Posté par pasScott pasForstall . En réponse à la dépêche Patch pour le noyau Linux améliorant l'interactivité entre les applications console et Xorg. Évalué à 2.
Integer a = new Integer(0);
Integer b = new Integer(42);
Integer c = new Integer(a.intValue() + b.intValue());
On pourrait se demander pourquoi ils n'ont pas ajouter des add/substract etc
Auquel cas on aurait Integer c = a.add(c);
Mon petit doigt me dit que c'est pour des raisons de clarte d'api.
Bref, ca ne change strictement rien a la facon dont les Number etaient manipules avant java5.
Comme les for(Object value : iterable) d'ailleurs.
Fait un
Integer a = null
int b = a + 1;
Ou un
List strings = null;
for(String string : strings){
System.out.println("brezilien");
}
Les deux vont te jeter un beau NPE.
Quand a la surcharge d'operateur, c'est un truc qui est a l'oppose de la philosophie Java (et de n'importe quel langage objet un tant soit peu coherent d'ailleurs).
Java est un langage entreprise.
Ca sert a faire des systemes couillu, crees par des equipes independantes qui ne communiquent pas forcement beaucoup, qui sont la colonne vertebrale d'une boite, qui vont generalement etre ecrit, deploye en prod et rester la pendant 10, 20, 30 ans.
On a un systeme au taff en prod depuis plus de 10 ans. Et il pourrait bien faire 10 ans de plus si le management avait pas decide de l'outsourcer.
Une des raisons de son adoption massive, c'est que le langage est tres simple, et tres explicite.
Tu files une methode Java a n'importe quel mec qui a deja tape du code, il comprendra instantanement ce que le code fait, et sans aucune ambiguite.
Tu peux pas clairement pas dire la meme chose de n'importe quel autre langage complexe, genre c++ ou pire, perl.
Je considere ca comme un prerequis fondamental pour faire du code de qualite. Un code de qualite se lit comme un livre, si faut passer son temps a sauter partout dans le code pour savoir si + n'a pas ete surcharge pour tel objet, mais pas pour tel autre, c'est pas vivable.
Dans une boite ou le systeme est critique et ou les devs peuvent etre parti depuis tres longtemps, ou une ssii ou le mec qui a commence le projet se retrouver parachute expert python 15 jours apres et part ailleurs, c'est tres important, ca permet de passer la patate chaude plus facilement.
Si un petit malin s'amuse a surcharger les operateurs, bon courage pour facilement comprendre ce que fait le code. Et t'ouvres la porte a de potentiels gros problemes de perf ou autres pour les gens qui utilisent tes classes.
Note que de toutes facons, surcharge des operateurs ou pas, ca changera pas grand chose, vu que tous les types de bases sont immutable en Java.
Et meme s'ils ne l'etaient pas, ce sont des objets, et les objets ne s'ajoutent pas entre eux.
Et si tu regardes les implems, les objets ne s'ajoutent pas entre eux, ca n'a aucun sens.
Tu vas me dire qu'on peut ajouter des strings en java, je te repondrais que non, c'est du pur sucre syntaxique la encore.
"toto" + "titi" sera compile en
new StringBuilder("toto").append("titi").toString().
Et c'est pour ca que concatener des chaines dans une boucle, c'est mal, m'voyeeez? Surtout avant java 5 ou il n'y avait que StringBuffer qui est synchronizee, c'est moins grave maintenant.
Et c'est aussi pour ca que passer par des StringBuilder pour concatener 3 chaines, c'est mal, m'voyeez?: ca rend le code moins lisible pour 0 gains.
If you can find a host for me that has a friendly parrot, I will be very very glad. If you can find someone who has a friendly parrot I can visit with, that will be nice too.