IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Etes vous pour ou contre cette proposition ?

Votants
269. Vous ne pouvez pas participer à ce sondage.
  • Pour

    81 30,11%
  • Contre

    188 69,89%
Langage Java Discussion :

JDK 7: Proposition 3 : Comparer les énumérations [Débat]


Sujet :

Langage Java

  1. #1
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut JDK 7: Proposition 3 : Comparer les énumérations
    Aujourd'hui :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enum Size { SMALL, MEDIUM, LARGE }
    
    if (mySize.compareTo(yourSize) >= 0)
        System.out.println(“You can wear my pants.”);

    Demain :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enum Size { SMALL, MEDIUM, LARGE }
    
    if (mySize > yourSize)
        System.out.println(“You can wear my pants.”);

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonsoir

    Je suis pour mais les cas d'utilisation semblent très limités, non ?

    Qui irait comparer la classique énumération saison {AUTUMN, SPRING, WINTER, SUMMER} ?

    yann

  3. #3
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Je suis contre. Qu'est ce qui définit la notion d'ordre pour une énumération ?

    Par exemple si j'ai une énumération des modes de paiement:
    ESPECES, CHEQUES, CB.

    Pourquoi ESPECES < CHEQUES me donnerai true (ou false) ?????

    Si on veut un opérateur de comparaison, il faut l'implémenter et non se baser sur la déclaration.

    A+
    Gronono

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Contre, pour les même raisons que gronono.

  5. #5
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Cela n'invente rien non plus !
    http://java.sun.com/j2se/1.5.0/docs/...ml#compareTo(E)

    La question serait plus de savoir si cet opérateur se basera sur la méthode compareTo() ?

  6. #6
    Membre actif Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 239
    Points
    239
    Par défaut
    plutot contre

    à mon sens la methode compareTo() à plus de sens que l'operateur > ou <

    comme le dit gronono la sémantique est plus importante

  7. #7
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par n!co Voir le message
    Cela n'invente rien non plus !
    http://java.sun.com/j2se/1.5.0/docs/...ml#compareTo(E)

    La question serait plus de savoir si cet opérateur se basera sur la méthode compareTo() ?
    Contrairement à la méthode compareTo, l'opérateur < n'a pas de javadoc. Et donc ne précise pas que l'ordre est l'ordre des déclarations.

    Je pense que ce n'est pas une bonne chose qu'une énumération implémente Comparable. on devrait pouvoir le faire à la demande comme pour les autres classes.

    D'ailleurs à partir de maintenant, je vais systèmatiquement rédefinir cette méthode pour renvoyer une UnsupportedOperationException.

    A+
    Gronono

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ben, j'aime pas, je trouve que ça ne facilite pas la lisibilité du code.
    Je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( mySize > size.LARGE )
    Dans tous les cas, je ne comprends pas l'exemple... quel lien entre mySize, yourSize et Size ?
    D'un autre côté, je n'ai jamais utilisé d'enum, ça vient certainement de là...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    J'ai voté pour, mais en y réfléchissant à deux fois, je suis plutôt contre pour les même raisons que gronono.

  10. #10
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 057
    Points
    1 057
    Par défaut
    J'ai voté contre, la sémantique de > n'est pas valide pour toutes les enum.

    Après je serais bien pour la surcharge d'opérateur mais c'est un autre débat.

  11. #11
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Je suis contre pour les mêmes raisons que celles énoncées précédemment.

    Cependant, je serais d'accord si cette fonctionnalité était optionnelle.
    Pouvoir comparer des enums est intéressant, mais cela dépend de leur implémentation et il me semble donc primordiale que ce soit le développeur qui spécifie explicitement si une enum est comparable (via un mot clé ou un implements Comparable ou autre).

  12. #12
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Une lisibilité bizarre pour cette option.

  13. #13
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut
    Citation Envoyé par gronono Voir le message
    Contrairement à la méthode compareTo, l'opérateur < n'a pas de javadoc.
    +1
    Plus j'avance dans les propositions, plus je suis épaté par les contres-arguments soulevés. Ca sent le vécu quand même

  14. #14
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    bonsoir,

    La structure de contrôle foreach n'a pas de Javadoc et on est bien content de pouvoir l'utiliser (pourtant la classe Iterable et la méthode iterator ont une javadoc). Le tout est de connaitre le mécanisme qu'il y a derrière !

    Et la javadoc de compareTo de la classe Enum est claire !

    [edit]
    et en fait j'aimerai bien que cette fonctionnalité (sauf pour le == ) soit étendue à toutes les classes qui implémentent Comparable !! M'enfin je lance ça comme ça sans en avoir étudier les tenants et aboutissants On pourrait, par exemple comparer des objets de type date le plus naturellement du monde.
    [/edit]

    yann

  15. #15
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    En fait, il y a deux sujets différents dans cette proposition.

    Si l'opérateur < revient à faire .compareTo alors je suis plutot pour. On pourrait ainsi comparé deux objets et je pense que c'est même plus lisible.
    Par exemple si j'ai un objet Personne qui implémente Comparable alors je peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Personne p1 = ...
    Person p2 = ..
    if (p1 < p2) {
     // Faire qqchose
    }
    Serait équivalent au code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Personne p1 = ...
    Person p2 = ..
    if (p1.compareTo(p2)) {
     // Faire qqchose
    }
    Le second sujet est que les énumérations implémentent Comparable. Sur ce point je suis contre pour les raisons evoquées ci-dessus.

    A+
    Gronono

  16. #16
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ca risque de devenir ambigüe. Je suis contre également.

  17. #17
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Pour mais à condition que ce soit basé sur compareTo comme on le fait déjà pour le tri automatique des Collection.

    Ça reviendrait à ajouter un compareTo dans la class Object (comme le equals) qui serait par défaut une comparaison du hashCode, on aurrait ensuite les comparateurs >, <, <=, >= qui se baserait sur la valeur retourné par le compareTo.

    En fait, c'est quand même bien compliqué donc j'hésite ...

  18. #18
    Membre habitué Avatar de ludosoft
    Homme Profil pro
    Chef de projet technique
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Points : 136
    Points
    136
    Par défaut
    Pour moi ça craint aussi. Faut pas vouloir faire avec un type énuméré ce qu'ont ferait avec un entier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    enum Humain { HOMME, FEMME, BB }
    HOMME+FEMME=BB ?

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Points : 2 522
    Points
    2 522
    Par défaut
    Contre. En fait, c'est le retour des méthodes operator du C++, avec leur cortège de défauts. Le principal : la yntaxe créé la confusion, et on a tendance à y mettre un contenu implicite qui n'est peut-être pas le contenu de l'operateur. Les bénéfices étant par ailleurs plutôt faibles (écriture un peu plus compacte), je vote contre sans hésiter.

  20. #20
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Pour moi c'est une forme de surcharge des opérateurs, qui a été refusée dès le début de java, donc pourquoi s'y mettre maintenant ? Les interfaces de Comparator et Comparable sont utiles et bien faites, et trouve ça plus modulaire : on choisit nous même le Comparator pour trier une liste, par exemple. Cette proposition incite les développeurs à fournir des classes qui se basent directement sur l'opérateur.

Discussions similaires

  1. Réponses: 165
    Dernier message: 03/09/2009, 15h35
  2. [Collections][HashMap]Comparer les objets de la hashmap
    Par rvfranck dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 16/12/2005, 21h29
  3. [Java 5] Réflexion sur les énumérations type-safe
    Par rozwel dans le forum Langage
    Réponses: 5
    Dernier message: 04/12/2004, 20h34
  4. comparer les valeurs d'un tableau
    Par nicerico dans le forum ASP
    Réponses: 4
    Dernier message: 19/08/2004, 11h20
  5. Comparer les types de variable
    Par onipif dans le forum ASP
    Réponses: 11
    Dernier message: 27/05/2004, 18h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo