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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  10. #10
    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.

  11. #11
    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 ...

  12. #12
    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 ?

  13. #13
    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.

  14. #14
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Contre.
    Je crois que mes raisons ont déjà été citées plus hat: aucune relation d'orde triviale ne peut être défini sur les enums, à l'inverse des entiers par exemple.

  15. #15
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Contre bien entendu. Bien malin celui qui peut définir un ordre total sur n'importe quelle énumération. Implémenter Comparable, qui est fait pour, me semble une meilleure idée. Cette proposition ajouterait un sucre syntaxique inutilisable dans la plupart des cas, donc c'est généraliser quelque chose qui ne l'est pas (généralisable ).

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Contre
    A mon avis c'était dès le départ une mauvaise idée que les enum soient automatiquement Comparable. N'en rajoutons pas :p

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 586
    Points : 1 147
    Points
    1 147
    Par défaut
    A priori, je dirais contre, pour la raison habituelle qu'on n'a pas obligatoirement un ordre dans une énumération.

    Mais:
    Citation Envoyé par ripounet Voir le message
    A mon avis c'était dès le départ une mauvaise idée que les enum soient automatiquement Comparable. N'en rajoutons pas :p
    Et donc, justement, si le langage veut rester cohérent, on doit pouvoir utiliser < = > .
    Je serais donc plutôt pour finalement, sachant que c'est au programmeur d'utiliser cette possibilité quand elle a un sens.

  18. #18
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    contre.

    Ca ressemble a une revendication des habitués de l"enum du C dans lequel les valeurs sont forcement des "int".

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Points : 30
    Points
    30
    Par défaut Contre moins de POO
    Je pense que remplacer compareTo() par un opérateur rend la programmation moins orienté objet (c'est pour moi la clé de voûte du java).

    Avec l'objet, on peut tout faire, même avec une Collection.

    Si l'on dispose d'une Collection avec des éléments comparables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Collection Size {
      S,
      M,
      L,
      XS,
      XL;
    }
    On ne peut surcharger compareTo() de Enum car elle est final.
    Mais on peut très bien faire ses propres méthodes avec un nom explicite.
    On passe un entier au constructeur de la collection afin de définir le rang :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Collection Size {
      S(-1),
      M(0),
      L(1),
      XS(-2),
      XL(2);
     
      public int iSize = 0;
     
      public Size(int iSize) {
        this.iSize = iSize;
      }
     
      public int compareToSize(Size s) {
        return iSize - s.iSize;
      }
     
      public boolean isGreaterThanSize(Size s) {
        return iSize > s.iSize;
      }
     
      public boolean isSmallerThanSize(Size s) {
        return iSize < s.iSize;
      }
     
    }
    On devrait même surcharger equals() pour comparer le rang.

    L'utilisation est très explicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (s1.isGreaterThanSize(s2)) System.out.println("vous êtes sûr que vous faites du 36?")

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