|
|||||||
| Débats Les débats et sondages sur le langage et les technologies Java |
|
|
Publicité ' | |||||||||||||||||
|
|
|
Outils de la discussion |
|
|
#141 |
![]() Consultant informatique Inscription : février 2004 Messages : 1 180 ![]() |
Sans vouloir retomber dans l'éternelle discussion java vs c++, juste pour te donner un autre éclairage:
En C++ si tu veux aller vite tu peux, les casts barbare, les accès pirate, les macros de brute, tout ça ce sont des 'raccourcis' que j'ai déjà pas mal vus dans les code C++ que j'ai rencontré dans mon travail. Heureusement C++ permet de faire aussi du travail propre comme tu le dis, mais pas seulement et seul la personne compétente et motivée le fera. En Java tu n'as pas le choix, tu codes pur objet et en respectant les règles, le résultat est un code plus propre et pas forcément plus rapide à écrire. Ce qui donne l'impression que c'est un langage permettant d'écrire rapidement des programmes c'est qu'il vient avec une grosse API de base et qu'il y a énormément de framework puissant autour qui permettent de faire énormément de choses. Quand tu regardes certains patterns par exemple, le java est vraiment plus lourd à manipuler, regarde le visiteur par exemple .. 10x plus simple en C++. Moi actuellement j'utilise java pour un projet ou en lieu et place il y a une dizaine d'année tout le monde aurait mis du C++, pire je suis en train de me débarrasser des dernières parties écrites en C++ car en terme de maintenance et d'évolution elles sont vraiment pénalisantes pour le reste de notre projet. Et c'est d'ailleurs pourquoi certains sucre syntaxique m'horripile autant.. En espérant ne pas démarrer un troll ici, Bulbo
__________________
[Java] [NetBeans] [CVS] La FAQ Java Merci de ne pas me poser de questions techniques par MP. !! J'aurais voulu être une conserve !! |
|
|
00
|
|
|
#142 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2007 Messages : 15 ![]() |
Je suis pour à 100% !
![]() Je trouve "naturel" de faire des switchs sur des String. |
|
|
00
|
|
|
#143 |
|
Membre à l'essai
![]() Inscription : novembre 2007 Messages : 17 ![]() |
Pour, mais avant faire ce modification, il faut que ils finalement ajoutent l'operateur == pour String.
|
|
|
00
|
|
|
#144 |
|
Expert Confirmé Sénior
![]() Inscription : avril 2002 Messages : 2 676 ![]() |
Ca par contre c'est impossible car même si String est un objet avec de caractéristiques spéciales(constantes, opération +, ...), il reste un objet et la comparaison entre objets signifie une comparaison de la référence.
Par contre je me demande s'il ne serait pas judicieux d'ajouter un type primitif string. C'est juste une idée comme, ça je n'ai pas plus que ça réfléchi aux éventuelles conséquences. |
|
|
00
|
|
|
#145 | ||||
|
Membre à l'essai
![]() Inscription : novembre 2007 Messages : 17 ![]() |
Oui, un type primitif string peut etre une bonne idee - il y a un type string dans C# et ca marche parfaitement. Mais ce n'est pas un type vraiment primitif, et c'est pour ca qu'ils n'avons pas l'ajoute dans Java. Et ils ne l'ajouteront pas, probablement.
En general, je pense qu'il y a quelque chose sans tete avec toutes ces comparaisons: Code :
Code :
(Excusez moi pour mon francais pauvre et pour mon manque d'accents, mais je ne suis pas francais. Merci.) |
||||
|
|
00
|
|
|
#146 |
|
Expert Confirmé Sénior
![]() Inscription : avril 2002 Messages : 2 676 ![]() |
Non en fait c'est tout à fait logique. A partir du moment ou tu as une classe c'est une comparaison des références et non des valeurs.
Le cas de la comparaison Interger/int(et donc du switch) est particulier, d'ailleurs avant Java 1.4, ça te donnerait une erreur. C'est juste que grâce à l'autoboxing apparu avec Java 1.5, Integer est automatiquement converti en int. Donc la comparaison ce fait par valeur entre entre deux int. |
|
|
00
|
|
|
#147 |
|
Membre à l'essai
![]() Inscription : novembre 2007 Messages : 17 ![]() |
Il y a aussi un autre chemin pour faire comparaison des Strings possible. Je pense qu'ils pourraient changer de comparaison emploie quand on utilise switch. Maintenant le comparaison emploie par switch est ==, mais il pourrait etre .equals(). Ca ferait les deux codes faire la meme chose:
Avec ca, ils devrait permettre obj2 a ne pas etre const, et aussi ca aurait besoin de l'autoboxing du obj1 s'il est un type primitif. On de devrait changer l'ancien code, mais on peut comparer Strings et autres objets avec switch sans acun probleme. |
|
|
00
|
|
|
#148 |
|
Membre actif
![]() Inscription : octobre 2002 Messages : 185 ![]() |
J'ai longtemps hésité entre pour et contre.
J'ai finalement voté pour. Apres tout pour des classes de tests ça me serait bien utile. Mais je penses pas l'utiliser des mes développements finaux. Enfin je dis ça mais au boulot on est encore à la java 1.4.2, .... JHelp
__________________
Pour avoir une réponse efficace : 1) Soyez précis dans vos questions 2) Choisssez bien votre forum 3) Consultez la FAQ et la doc avant |
|
|
00
|
|
|
#149 | ||
![]() ![]() |
Perso je vote contre... les enumérations remplacent avantageusement ce genre d'opération.
Pour moi, du jour ou on fait un 'switch()' c'est qu'on a une liste de valeurs énumérées... et donc on utilise un enum. Code java :
|
||
|
|
00
|
|
|
#150 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2008 Messages : 10 ![]() |
Contre aussi, il y a certainement des cas légitimes de faire de la comparaison de chaines en dur mais je reste convaincu qu'ils sont rares.
De façon générale les chaines de caractères ne devraient qu'exceptionnellement être dans le code. Si ce sont des éléments de langue 'Mr' 'Mme' 'Mlle' 'True' 'False': ils devraient être dans des fichiers de config pour anticiper la localisation ou permettre le parametrage par un non-développeur. Les chaines de caractères ne devraient pas servir de marqueur interne, les énum sont là pour ça. Reste les cas genre lecture de xml, communication diverses avec d'autres entités. Mais là encore on va vite se trouver avoir un niveau d'abstraction qui fera que les chaines à comparer ne seront pas statiques mais dans une variable. Par contre le switch sur le chaines risque d'amener et d'encourager des pratiques peu recommandables: -utilisation de chaines au lieu d'enum: c'est lourd et ca ne sert à rien. -comparaison d'objet en passant par des strings: Code :
Code :
|
||||
|
|
00
|
|
|
#151 |
|
Membre régulier
![]() |
pour moi ça me faire qlq chose qui bien et donc je vote pour.
|
|
|
00
|
|
|
#152 | |
|
Membre du Club
![]() ludovic Ingénieur développement logiciels Inscription : avril 2002 Messages : 81 ![]() |
Contre car avec les enums je trouve cela plus propre
Citation:
|
|
|
00
|
|
|
#153 | ||
|
Membre régulier
![]() Développeur Java Inscription : août 2007 Messages : 56 ![]() |
Dur de se prononcer sur cette proposition.
Le type String est très particulier, si je me souviens bien quand on fait : Code :
Donc le type String est en effet approprié au switch. Mais ça reste un Objet, et utiliser un objet dans les switch case, je suis totalement contre, les enum suffisent, java n'est pas php. Vouloir intéresser du monde à java en laissant le développeur faire tout est n'importe quoi n'est pas une bonne idée, il suffit de voir le code php auquel on a affaire souvent. Je n'ai rien contre le php, mais les vrais développeur php sont rare, le php restant LE langage de bidouille pour ceux qui ne savent pas programmer. C'est bien, c'est utile, c'est un langage rapide, mais je doute que ce soit la finalité de java. |
||
|
|
00
|
|
|
#154 |
|
Membre éclairé
![]() Inscription : décembre 2007 Messages : 222 ![]() |
Clair, ça manque.
|
|
|
00
|
|
|
#155 | |||||
|
Membre confirmé
![]() Inscription : mai 2007 Messages : 242 ![]() |
Citation:
Exemple, le code suivant est faux Code :
|
|||||
|
|
00
|
|
|
#156 |
|
Membre du Club
![]() Développeur informatique Inscription : mai 2004 Messages : 49 ![]() |
Pour!
Cela sonnerait enfin le glas des longues séquences de if ... else if ... D'autre part, je serais même d'accord avec le fait que les opérateurs de comparaison soient surchargés pour String. Il y a en effet peu d'intérêt à comparer des chaînes de caractères par référence. Et le cas échéant Sun n'a qu'à proposer un nouveau moyen de comparer des objets en étant sûr que la comparaison se fasse par référence (un opérateur is ou une méthode statique Object.referenceEquals(Object, Object)). Pour finir, je dirais même (même si c'est un autre débat) qu'il serait temps que Sun réfléchisse à un moyen d'introduire la surcharge d'opérateurs dans Java. Je n'ai vraiment jamais perçu son omission comme un avantage (essayez de faire des calculs sur BigDecimal pour vous en convaincre). |
|
|
00
|
|
|
#157 |
|
Invité de passage
![]() Inscription : octobre 2008 Messages : 4 ![]() |
Faire un switch sur une chaine de caractère cela revient comparer cette chaine à un nombre fini de modalités existantes. En effet les expressions de case doivent correspondre à des expressions constantes.
Ces modalités seront donc soit :
Donc je suis contre cette proposition et pour une utilisation plus fréquente des énumérations. |
|
|
00
|
|
|
#158 | |
|
Expert Confirmé Sénior
![]() Inscription : avril 2002 Messages : 2 676 ![]() |
Citation:
|
|
|
|
00
|
|
|
#159 | ||
|
Expert Confirmé Sénior
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 654 ![]() |
Citation:
Une enum représente un nombre d'élément fini. Or on peut avoir besoin de faire un switch sur certain valeurs, et un cas générique pour toutes les autres valeurs... qui pourrait être infini ! Les enums ne sont pas vraiment adapté à cela ! De plus, je trouve que faire une enum uniquement pour simuler un switch sur les String est en quelque sorte un aveu que le switch sur les String est manquant Citation:
Contrairement aux Generics qui permettaient d'adapter les classes existantes en conservant la compatibilité, l'utilisation des Enums ne peut pas remplacer l'utilisation des constantes car cela casserait la compatibilité... a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
||
|
00
|
|
|
#160 |
|
Membre à l'essai
![]() Inscription : mars 2008 Messages : 20 ![]() |
Cette évolution me semble inutile surtout parce qu'il n'est pas possible de l'utiliser en ignorant la casse ou avec trim() ou des expressions régulières.
L'étendre à toutes les classes est impensable. L'utilisation des enums est bien suffisante est plus facile à faire évoluer. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com