Précédent   Forum du club des développeurs et IT Pro > Java > Communauté Java > Débats

Débats Les débats et sondages sur le langage et les technologies Java

Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?
Pour 404 85,77%
Contre 67 14,23%
Votants: 471. Vous ne pouvez pas participer à ce sondage.

Publicité
'
Réponse
 
Outils de la discussion
Vieux 19/12/2007, 16h00   #21
n!co
Membre émérite
 
Avatar de n!co
 
Inscription : février 2004
Messages : 831
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : février 2004
Messages : 831
Points : 845
Points : 845
Citation:
Envoyé par bobuse Voir le message
En fait, si n!co pense bien comme moi, ce n'est pas que le switch serait plus crado que des if/then/else, mais que c'est le fait d'utiliser des String pour conditionner des actions qui est crado. Il vaut mieux effectivement utiliser des enums
C'est bien à cela que je pensais => soit un element de plus a maintenir pour être sur que si tu change un string a un endroit, faut pas oublier de le modifier de l'autre.

Ce qui aujourd'hui est élégament réglé avec les énums ...
__________________
Netbeans account : nico@share.java.net
Merci de ne pas poser de questions techniques par MP
n!co est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 17h48   #22
nicorama
Membre Expert
 
Avatar de nicorama
 
Inscription : juillet 2006
Messages : 765
Détails du profil
Informations personnelles :
Âge : 37
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 765
Points : 1 054
Points : 1 054
Citation:
Envoyé par n!co Voir le message
C'est bien à cela que je pensais => soit un element de plus a maintenir pour être sur que si tu change un string a un endroit, faut pas oublier de le modifier de l'autre.

Ce qui aujourd'hui est élégament réglé avec les énums ...

Je renchéris : le Java, ce n'est pas du PHP. Je vote contre !

Par contre, pourquoi ne fait-on pas un switch d'objet ? Pour quelques algorythmes complexes, je renvois soit un Integer, soit un Objet complexe. Un switch basé sur les références est 100% entretenable en refactoring, non ?
__________________
Robusta Web Library : Clients RESTful open source pour Java, Android & GWT.
API Simple et Productive. Avec style.
nicorama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 02h25   #23
DrHelmut
Membre actif
 
Avatar de DrHelmut
 
Homme Hugo CAPOCCI
Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm
Inscription : octobre 2005
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Hugo CAPOCCI
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm

Informations forums :
Inscription : octobre 2005
Messages : 100
Points : 169
Points : 169
Contre...

Car bien que ça parte d'une bonne intention au départ, cela implique des complications inutiles car d'autres pratiques équivalentes (et pas plus lourdes - genre Enum) existent. 3 ans que je code en java en m'en passant très bien perso...

Les complications inutiles que j'y voit :

- Implémenter switch/case avec des String mais pas avec tous les objets ne serait ABSOLUMENT PAS dans la philosophie objet (de java en tout cas)
En effet pourquoi une opération fonctionnertait avec UN type d'objet et pas avec les autres ? Ce serait une première ! (non ?)

- Avec les IDE, simplifier la syntaxe de Java ne servira pas à grand chose je pense et ça alourdirait ou impliquerait des modifications plus ou moins significatives de la JVM pour un gain très peu significatif.

- Un NullPointerException potentiel...
DrHelmut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 08h15   #24
benwit
Rédacteur
 
Avatar de benwit
 
Inscription : septembre 2004
Messages : 1 628
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 1 628
Points : 3 094
Points : 3 094
Je suis d'une même avis que coyote.

Citation:
Envoyé par coyote999 Voir le message
Je suis pour mais je serais d'avis de ne pas seulement se limiter au type String. Pourquoi ne pas aller plus loin et permettre un switch qui pourrait comparer des objets identiques.

On pourrait comparer des String, des BigDecimals mais également des classes que nous avons développé nous-mêmes.
benwit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 09h17   #25
natha
Expert Confirmé
 
Avatar de natha
 
Inscription : janvier 2006
Messages : 2 344
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2006
Messages : 2 344
Points : 2 861
Points : 2 861
Les String sont souvent utilisées un peu partout comme clés (ActionCommand, Layout, etc.).
Apporter un switch se révèlera très intéressant pour tous ces endroits où il faut soit faire des if/else, soit créer une enum et faire des astuces style :

Code :
1
2
set(monEnum.name())
MonEnum.valueOf(get())
Pour maîtriser totalement le type. Mais c'est un peu lourdingue.

Alors oui pour le switch sur String.

Contre le switch généralisé car créer une instance d'un objet par case juste pour comparer, ça va pas me plaire du tout Comme l'a dit adiGuba je crois, le type String est un type particulier entre le primitif et l'objet normal.
__________________
Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
De la bonne manière de poser une question (et de répondre).
Je ne fais pas de service par MP. Merci (...de lire les règles...).
Ma page dvp.com
natha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 09h31   #26
Deadpool
Membre Expert
 
Avatar de Deadpool
 
Homme David
Inscription : novembre 2005
Messages : 1 244
Détails du profil
Informations personnelles :
Nom : Homme David
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : novembre 2005
Messages : 1 244
Points : 1 652
Points : 1 652
Citation:
Envoyé par DrHelmut Voir le message
Contre...

Car bien que ça parte d'une bonne intention au départ, cela implique des complications inutiles car d'autres pratiques équivalentes (et pas plus lourdes - genre Enum) existent. 3 ans que je code en java en m'en passant très bien perso...

Les complications inutiles que j'y voit :

- Implémenter switch/case avec des String mais pas avec tous les objets ne serait ABSOLUMENT PAS dans la philosophie objet (de java en tout cas)
En effet pourquoi une opération fonctionnertait avec UN type d'objet et pas avec les autres ? Ce serait une première ! (non ?)
Non ce n'est pas une première, l'opérateur + est surchargé pour les String (opérateur de concaténation) et pas pour les autres objets.

Sinon perso, ayant fait du C# et considérant le fait que le switch sur les String est possible en C#, je suis plutôt pour avoir la même chosee en Java.
__________________
“THERE IS NO JUSTICE. THERE’S JUST ME!”
Deadpool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 09h43   #27
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 657
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations professionnelles :
Activité : Développeur Java/Web
Secteur : Transports

Informations forums :
Inscription : avril 2002
Messages : 12 657
Points : 22 435
Points : 22 435
Citation:
Envoyé par Deadpool Voir le message
Non ce n'est pas une première, l'opérateur + est surchargé pour les String (opérateur de concaténation) et pas pour les autres objets.
L'opérateur + est surchargé pour tous les objets... mais il génère une String

Mais les String sont quand même des objets bien particulier, il possède leurs propre littéral et pas mal de spécificité par rapport aux autres objets. En particulier ils peuvent être utilisé comme constante (et donc déterminé à la compilation).

Ce qui permettrait de les utiliser dans un switch, contrairement aux objets standards car le compilateur ne pourrait pas vérifier leurs valeurs et les éventuelles problèmes que cela pourrait poser (doublons, etc...).



Et un switch est quand même bien plus pratique qu'un suite de if/else ou qu'un grosse Map d'association...



En parlant des switch j'aimerais bien également avoir la possibilité d'utiliser un interval de données avec les types numériques, par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
switch(intValue) {
    case 0-9:
           ...
           break;
    case 10-99:
           ...
           break;
    default:
           ...
           break;
}
Actuellement on est obligé d'utiliser un case par valeur


a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 09h55   #28
OButterlin
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 087
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 087
Points : 5 823
Points : 5 823
Citation:
Envoyé par adiGuba Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
switch(intValue) {
    case 0-9:
           ...
           break;
    case 10-99:
           ...
           break;
    default:
           ...
           break;
}
Oui, ça serait pas mal du tout...
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 10h03   #29
Deadpool
Membre Expert
 
Avatar de Deadpool
 
Homme David
Inscription : novembre 2005
Messages : 1 244
Détails du profil
Informations personnelles :
Nom : Homme David
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : novembre 2005
Messages : 1 244
Points : 1 652
Points : 1 652
Citation:
Envoyé par adiGuba Voir le message
L'opérateur + est surchargé pour tous les objets... mais il génère une String
C'est pas faux.

Non en fait je voulais dire que par exemple on pouvait faire ça :

Code :
1
2
3
4
 
String a = "toto";
String b = "tata";
String c = a + b;
mais pas ça :

Code :
1
2
3
4
5
6
 
BigInteger i = BigInteger.valueOf(1);
BigInteger j = BigInteger.valueOf(2);
BigInteger k = i + j;
//ne compile pas
//Erreur :The operator + is undefined for the argument types java.math.BigInteger, java.math.BigInteger.
Mais c'est vrai que c'était pas clair.


En java 5 ça marche quand même avec les types wrappers du fait de l'auto-(un)boxing.
__________________
“THERE IS NO JUSTICE. THERE’S JUST ME!”
Deadpool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 10h08   #30
bmoussaud
Membre expérimenté
 
Avatar de bmoussaud
 
Benoit Moussaud
Inscription : décembre 2003
Messages : 218
Détails du profil
Informations personnelles :
Nom : Benoit Moussaud
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 218
Points : 548
Points : 548
Envoyer un message via Yahoo à bmoussaud Envoyer un message via Skype™ à bmoussaud
Trop longtemps que j'attend cette fonctionnalité
__________________
Benoit Moussaud - XebiaLabs - Automatisation des déploiements. Screencast & Demo
bmoussaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 10h28   #31
longbeach
Rédacteur/Modérateur
 
Avatar de longbeach
 
Inscription : avril 2003
Messages : 930
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : avril 2003
Messages : 930
Points : 1 971
Points : 1 971
je suis complètement pour.
longbeach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h18   #32
Alec6
Membre confirmé
 
Inscription : juillet 2002
Messages : 621
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 621
Points : 297
Points : 297
On peut pas pousser plus loin le langage ?

Avec les primitifs on compare à la fois l'égalité et l'identité

Avec les strings on compare le concept d'égalité.

On devrait pouvoir faire cette comparaison avec tout type d'objet.

Et mieux

switch equality{ } pour un equals

switch identity{ } pour un ==
Alec6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h53   #33
natha
Expert Confirmé
 
Avatar de natha
 
Inscription : janvier 2006
Messages : 2 344
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2006
Messages : 2 344
Points : 2 861
Points : 2 861
Citation:
Envoyé par Alec6 Voir le message
On peut pas pousser plus loin le langage ?
C'est dangereux de vouloir trop en faire.
Je ne vois pas vraiment de besoin pour les autres types d'objets.
__________________
Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
De la bonne manière de poser une question (et de répondre).
Je ne fais pas de service par MP. Merci (...de lire les règles...).
Ma page dvp.com
natha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 13h57   #34
ReaM
Membre à l'essai
 
Inscription : août 2004
Messages : 34
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : août 2004
Messages : 34
Points : 23
Points : 23
Envoyer un message via MSN à ReaM
Comme dit par plusieurs d'entre vous , je suis pour parce que c'est clair que dans certains cas ( ils ne sont pas nombreux non plus ) cette possibilité m'a énormément manqué, mais il faut quand même ne pas oublier que les enums ont souvent palier à ce problème.
ReaM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h01   #35
cysboy
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 134
Points : 134
Je suis pour aussi à 200%.
Cà manquait vraiment et c' est très pratique !
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h02   #36
xavlours
Membre Expert
 
Avatar de xavlours
 
Inscription : février 2004
Messages : 1 833
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 1 833
Points : 2 154
Points : 2 154
Je suis pour, principalement parce que les Strings sont historiquement utilisés comme clé/constante dans pas mal de coins de l'API. Par contre je trouve que ça ne suffit pas, il faudrait généraliser ça, parce qu'il est mieux d'avoir une règle qu'une exception, et l'étendre sur tous les Objets avec la méthode equals. Libre au développeur de surcharger cette méthode pour utiliser l'égalité pointeur ==.
__________________
"Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.
xavlours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h11   #37
zefyre
Invité de passage
 
Étudiant
Inscription : mai 2007
Messages : 2
Détails du profil
Informations personnelles :
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 2
Points : 1
Points : 1
Par défaut A fond!!!

Le switch avec des Strings simpifiera la vie des développeurs dans de nombreux cas:
1-Dans les factory on pourra faire un switch sur le nom de la classe
2-Dans les MVC switch sur les actions

Les if-else sont mort, vive les siwtch !!
zefyre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h23   #38
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 657
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations professionnelles :
Activité : Développeur Java/Web
Secteur : Transports

Informations forums :
Inscription : avril 2002
Messages : 12 657
Points : 22 435
Points : 22 435
Citation:
Envoyé par xavlours Voir le message
Par contre je trouve que ça ne suffit pas, il faudrait généraliser ça, parce qu'il est mieux d'avoir une règle qu'une exception, et l'étendre sur tous les Objets avec la méthode equals. Libre au développeur de surcharger cette méthode pour utiliser l'égalité pointeur ==.
Si cela serait généralisé sur tout les objets on aurait encore plus d'exception, avec :
  • D'un coté le switch sur les types primitifs et les String, qui utiliserait des constantes vérifié par le compilateur et dont le résultat sera toujours le même pour une valeur donné, et surement optimisé par le compilateur (car connaissant les valeurs des case, il peut les ordonner).

  • De l'autre coté le switch sur les objets, basé sur le couple hashCode()/equals(), avec des objets dont la valeur est inconnu à la compilation, et dont la valeur pourrait varier au court du temps...


Perso si je suis plutôt pour le switch sur les String, je ne suis pas d'accord pour le généraliser à tous les objets...

a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 17h58   #39
benwit
Rédacteur
 
Avatar de benwit
 
Inscription : septembre 2004
Messages : 1 628
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 1 628
Points : 3 094
Points : 3 094
Citation:
Envoyé par zefyre Voir le message
Le switch avec des Strings simpifiera la vie des développeurs dans de nombreux cas:
1-Dans les factory on pourra faire un switch sur le nom de la classe
2-Dans les MVC switch sur les actions

Les if-else sont mort, vive les siwtch !!
Je suis pour le switch des String dans certains cas mais absolument contre pour les exemples que tu donnes.

Personnellement, je pense que les utiliser dans ces cas font du mauvais code
à moins que j'ai mal compris ou que des exemples concrets me soient montré.

Pourquoi faire un switch dans les factory ? Pour choisir une implémentation particulière ? Mieux vaut à mon avis faire une injection de dépendance (via Spring ou autre, un simple fichier de paramétrage par exemple) ou bien un tableau de String avec une constante pour l'indice.

Pour ce qui est du switch sur les actions, ce n'est pas mieux !!!
Cela me rappelle une blague d'un prof sur les menus :
Un développeur débutant fait un test de l'item du menu pour déclencher l'action appropriée.
Un développeur de chez Microsoft fait une étude statistique pour mettre en haut du menu (et tester en premier) les items qui ont le plus de chance d'être executé.
Un développeur de C++ fait un tableau de pointeur de fonctions.

En tant que développeur Java, je code des objets actions avec une méthode execute qui fait directement mon traitement sans faire une suite de tests (switch ou pas ...)
benwit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 18h16   #40
kpouer
Membre confirmé
 
Inscription : mars 2007
Messages : 259
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 259
Points : 251
Points : 251
Euh moi je le ferai pas avec un == ce switch, l'appel du equals() fait très bien l'affaire, et ainsi ca serait généralisé aux objets et non plus aux Strings.
De plus ca ne se remplace pas toujours par des enum, par exemple une entrée utilisateur qui est une String on pourrait faire
switch (val)
{
case "val1":faire un truc;break;
case "val2":faire un truc;break;
...
default : entréeinvalide;break;
}
Si on a un enum il faut déjà retrouver a quelle valeur de l'enum correspond la String
kpouer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h30.


 
 
 
 
Partenaires

Hébergement Web