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 15/02/2008, 14h02   #101
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 458
Points : 16 458
Citation:
Envoyé par kisame Voir le message
ouais mais là ça reste de la faute de frappe.

de la même manière (...)

ça reste aussi porc et dangereux avec un type primitif.
Oui, bien sur il n'y a pas de solutions miracles, mais c'est plus difficile à repérer dans les chaînes de caractères...

Code :
1
2
3
4
5
6
7
8
9
switch (role) {
case "guest":  /* ... */
case "user":  /* ... */
case "poweruser":  /* ... */
case "manager":  /* ... */
case "administator":  /* ... */
case "noaccess":  /* ... */
default: /* ... */
}
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 14h39   #102
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 kisame Voir le message
Code :
1
2
 
case 44:    <--- ça passe alors que c'est une faute de frappe.
Mauvaise fois inside
__________________
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 15/02/2008, 15h00   #103
kisame
Membre régulier
 
Inscription : mars 2005
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 142
Points : 99
Points : 99
oui totalement.

Mais pas plus que
case "administator":
case "NOz": /* ...*/
C'est un exemple basé sur une erreur de frappe en réponse à un exemple basé sur une erreur de frappe. Ne me dis pas le contraire

c'était ce que je voulais montrer (la mauvaise foi) mais c'est pas moi qui l'ai dit

edit : tiens ... en quoi mon exemple est pire que le sien ?
kisame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 15h15   #104
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 458
Points : 16 458
Citation:
Envoyé par kisame Voir le message
edit : tiens ... en quoi mon exemple est pire que le sien ?
En théorie les 2 erreurs de frappes sont équiprobables. Dans la réalité, il est plus courant de se gourer sur une suite de lettres que sur une suite de chiffres.

Reprend tous les posts de la discussion et compte le nombre de fautes/typos sur des lettres versus des chiffres.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 15h39   #105
kisame
Membre régulier
 
Inscription : mars 2005
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 142
Points : 99
Points : 99
non mais je suis bien d'accord
C'est juste que pour moi, la faute de frappe n'est pas un argument de poids. Pour cette proposition c'est un argument mais à prendre pour ce que c'est. Et oui ça arrive plus souvent de se planter dans une chaine de caractère que dans la saisie d'un chiffre

Ton exemple venait quand on discutait sur la "propreté" du code. Dans les deux cas ça reste autant dégueu.

Encore une fois, une constante résout le problème (là je pense qu'il ne peut même pas y avoir débat sur ce point). Mais le problème existe autant pour les types primitifs que pour les string. C'est ce que je voulais dire.

Je suis pour un utilisation décomplexée des strings
kisame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h00   #106
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 458
Points : 16 458
Citation:
Envoyé par kisame Voir le message
Je suis pour un utilisation décomplexée des strings
Pour avoir mis les mains dans des appli AJAX, l'utilisation a outrance des chaînes de caractères m'a laissé un goût amer. C'est certe tres rapide et puissant, mais à debuguer/maintenir c'est une horreur.

Si le switch(String) est possible dans Java 7, j'ajouterai une nouvelle "bonne pratique" dans mon guide de developpement: Ne pas l'utiliser, sauf dans dés cas très simples pour eviter une suite de "if ("XX".equals(s)) {}".
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h02   #107
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 654
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 654
Points : 22 428
Points : 22 428
Citation:
Envoyé par pseudocode Voir le message
sauf pour simplifier une suite de "if ("XX".equals(s)) {}".
Ben... C'est justement l'objectif du switch(String)

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 15/02/2008, 16h09   #108
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 458
Points : 16 458
Citation:
Envoyé par adiGuba Voir le message
Ben... C'est justement l'objectif du switch(String)
Oui, je m'en suis apperçu en l'écrivant.

Ce que je veux dire c'est de ne pas utiliser le switch(String) comme un design pattern (a la javascript).

Code :
1
2
3
4
5
6
7
8
9
 
// THAT'S BAD
void persist(String command, Object o) {
  switch(command) {
    case "create": /* ... */
    case "update": /* ... */
    case "delete": /* ... */
  }
}
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h58   #109
kisame
Membre régulier
 
Inscription : mars 2005
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 142
Points : 99
Points : 99
Citation:
Je suis pour un utilisation décomplexée des strings
heu ... c'était plus une phrase à double sens

et puis ça veut dire ne pas avoir peur des les utiliser quand c'est fait de manière intelligente. Ca ne veut pas dire faire nimp
kisame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 13h05   #110
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
contre

l'égalité stricte de String est une problématique trop subtile pour baser une construction controlant le flux d'exécution de programmes là-dessus…
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 14h18   #111
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 JeitEmgie Voir le message
l'égalité stricte de String est une problématique trop subtile pour baser une construction controlant le flux d'exécution de programmes là-dessus…
Ce serait au compilateur de gérer ça correctement de toute façon en faisant un appel "mastring".equals(var) plutôt qu'un ==, ça doit pas être bien compliqué.
__________________
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 16/02/2008, 14h33   #112
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
Citation:
Envoyé par natha Voir le message
Ce serait au compilateur de gérer ça correctement de toute façon en faisant un appel "mastring".equals(var) plutôt qu'un ==, ça doit pas être bien compliqué.
ce n'est pas ça le propos…

la distance entre les niveaux sémantiques du "switch" et de la "String" sont trop grands pour les mélanger…

à la limite un "switch" sur un "char []" serait acceptable de ce point de vue…
mais pas une String…

(Strasse == Straße et autres joyeusetés…)
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 12h22   #113
ant_ams
Invité de passage
 
Inscription : mars 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 2
Points : 2
Points : 2
Je suis pour.

J'irais même un peu plus loin en proposant le switch pour les objets.
Voir mon blog pour plus de détail (en anglais)
http://www.jroller.com/agoubard/entry/switch_on_objects

Anthony
ant_ams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 14h37   #114
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 821
Points : 5 821
Citation:
Envoyé par JeitEmgie Voir le message
ce n'est pas ça le propos…

la distance entre les niveaux sémantiques du "switch" et de la "String" sont trop grands pour les mélanger…

à la limite un "switch" sur un "char []" serait acceptable de ce point de vue…
mais pas une String…

(Strasse == Straße et autres joyeusetés…)
Je pense qu'il n'y a pas de différence entre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
switch (varString)
{
   case "printemps" :
      ...
   case "été" :
      ...
   case "automne" :
      ...
   case "hiver" :
      ...
}
et
Code :
1
2
3
4
5
6
7
8
9
10
11
 
if ( varString.equals("printemps") )
{
   ...
}
else if ( varString.equals("été") )
{
   ...
}
else if ( ... )
...etc
Et le switch est beaucoup plus lisible, je ne vois pas ce qui te dérange.
Dans ton exemple, ce n'est pas en passant par un tableau de char que tu auras une égalité entre "Strasse" et "Straße" pour autant.

Si encore on prenait en compte l'encodage mixe des caractères (ISO-8859-1 et UTF-8 par exemple) où effectivement il y a une différence entre 2 représentations du même mot, je comprendrais une quelconque réticence (même si dans tous les cas, les suites de "if" ne règleront pas le problème)
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 14h50   #115
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 458
Points : 16 458
Citation:
Envoyé par OButterlin Voir le message
Dans ton exemple, ce n'est pas en passant par un tableau de char que tu auras une égalité entre "Strasse" et "Straße" pour autant.
La classe Collator sert justement à ca.

Si le switch(String) utilise "String.equals()" c'est moins puissant que faire un "if Collator.compare()"
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 14h56   #116
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 821
Points : 5 821
Citation:
Envoyé par pseudocode Voir le message
La classe Collator sert justement à ca.

Si le switch(String) utilise "String.equals()" c'est moins puissant que faire un "if Collator.compare()"
Tu veux dire que la classe Collator ne distingue aucune différence entre 2 caractères "ss" et un "ß" ???

Ça m'intrigue, je ferai un test à l'occasion (d'ailleurs merci en passant, je ne connaissais pas Collator, ça résoudra pas mal de choses... )

A+
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 15h00   #117
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 815
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 815
Points : 16 458
Points : 16 458
Citation:
Envoyé par OButterlin Voir le message
Tu veux dire que la classe Collator ne distingue aucune différence entre 2 caractères "ss" et un "ß" ???

Ça m'intrigue
Code java :
1
2
3
4
5
6
 
Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);
 
if (collator.compare("Straße", "Strasse")==0) 
	System.out.println("Tout pareil");
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 15h13   #118
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 654
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 654
Points : 22 428
Points : 22 428
Citation:
Envoyé par ant_ams Voir le message
J'irais même un peu plus loin en proposant le switch pour les objets.
Cela pose quand même certains problèmes :
  • De synchronisation : les objets pourraient bien être modifié depuis un autre thread.
  • D'immuabilité : les objets ne sont pas forcément immuable et leurs valeurs peut bien changer pendant qu'on est dans le switch
  • De validité du code : le compilateur ne peut pas comparer les différentes valeurs des objets, et on peut donc se retrouver avec plusieurs case qui sont en réalité identique, par exemple :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		BigDecimal d1 = new BigDecimal(1);
    		BigDecimal d2 = new BigDecimal("1");
     
     
    		switch(value) {
    		case d1: 
    			// ...
    			break;
    		case d2:
    			// ...
    			break;
    		}

De plus cela empêche le compilateur d'effectuer les optimisations habituelles...

Bref un switch case sur des objets "standards" je ne suis pas trop pour...


Citation:
Envoyé par OButterlin Voir le message
Je pense qu'il n'y a pas de différence entre :
Si il peut y en avoir une : pour les int le switch utilise un espèce de table de hashage pour améliorer les performances. On peut raisonnablement penser que ce serait la même chose pour les String...

Mais je te l'accorde dans 99% des cas la différence avec des if/else ne sera pas flagrante

Citation:
Envoyé par OButterlin Voir le message
Ça m'intrigue, je ferai un test à l'occasion (d'ailleurs merci en passant, je ne connaissais pas Collator, ça résoudra pas mal de choses... )
Les Collators permettent de comparer des chaines de caractères avec des règles plus souples qu'une simple comparaison "binaire", et permet ainsi de prendre en compte certaines spécificités des locales...

Comment comparer des chaînes de caractères selon la Locale ?

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 07/03/2008, 15h21   #119
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 821
Points : 5 821
Citation:
Envoyé par pseudocode Voir le message
Code java :

Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);

if (collator.compare("Straße", "Strasse")==0)
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Tout pareil");
Effectivement, j'ai testé, même si ça m'étonne, ça marche, c'est identique pour lui...

Merci
A+
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2008, 16h28   #120
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 654
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 654
Points : 22 428
Points : 22 428
Citation:
Envoyé par OButterlin Voir le message
Effectivement, j'ai testé, même si ça m'étonne, ça marche, c'est identique pour lui...
ß dérive de ss donc c'est normal qu'il trouve que c'est la même chose. C'est comme le œ et le oe de la langue française :

Code :
1
2
3
4
5
	Collator collator = Collator.getInstance(Locale.FRENCH);
	collator.setStrength(Collator.SECONDARY);
 
	if (collator.compare("oeil", "œil")==0) 
		System.out.println("Tout pareil");
Le Collator en mode SECONDARY ou moins ignore ce type de différence

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
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h02.


 
 
 
 
Partenaires

Hébergement Web