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. #21
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 68
    Points
    68
    Par défaut Contre
    Il suffit de lire La discution qui se tient ici pour voir que cela apporterait plus de confusion que de reel progres, Pensons y, CompareTo est deja implemente et semble clair, Les exemples donnes sont mal compris, ce qui me pousse encore plus a penser que ca serait a l'origine de plus de confusions.... Ce n'est pas souhaitable pour un language de prog...

    Non.

  2. #22
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2007
    Messages : 15
    Points : 44
    Points
    44
    Par défaut
    J'ai voté pour. En effet, je pense que les types énumérés du langage Java devraient fonctionner de la même façon que les types énumérés du langage Pascal.

    En langage Pascal, les éléments d'un type énuméré sont naturellement ordonnés par l'ordre dans lequel ils sont déclarés. Si on écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type jours = ( lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche );
    on a

    lundi < mardi < mercredi < jeudi < vendredi < samedi < dimanche
    A en juger la documentation du JDK 5 (http://java.sun.com/j2se/1.5.0/docs/...l#compareTo(E)), le type énuméré du Java a été pensé de la même façon que pour le langage Pascal.

    Pourquoi n'aurions-nous pas simplement la même chose en Java ?

    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
    enum Jour { LUNDI, MARDI, MERCREDI, JEUDI , VENDREDI, SAMEDI, DIMANCHE }
    
    (...)
    
    Jour jour1;
    Jour jour2;
    
    (...)
    
    if (jour1 < jour2) {
      (...)
    }
    
    if (jour1 < Jour.JEUDI) {
      (...)
    }
    Je vois que des gens ont soulevé la question de savoir quel sens donner à la comparaison entre les constantes d'un type énuméré. A mon avis, il n'y a pas de question à se poser et il n'y a pas de comparateur à implémenter. Je ne pense pas non plus que l'on puisse parler de notion de surcharge d'opérateur puisqu'il n'y a qu'un seul sens possible à donner à l'opérateur de comparaison.

    Si on se trouve dans une situation où la notion d'ordre sur les éléments n'a pas de sens alors il ne faut pas utiliser une énumération mais un ensemble (concept qui n'impose pas la notion d'ordre).

  3. #23
    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.

  4. #24
    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 : 40
    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 ).
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  5. #25
    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

  6. #26
    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 081
    Points
    16 081
    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".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #27
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par gronono Voir le message
    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
    Tout à fait d'accord sur les 2 sujets (donc je ne vote pas) : je voterais "pour" si la question était de généraliser les raccourcis syntaxiques de comparaison entre Comparable, mais "contre" si la question était de conserver les énumérations Comparable.
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  8. #28
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    A vrai dire je trouve l'intérêt plutôt limité, même s'il est vrai que comparer des jours comme le décrit nlegriel peut trouver une utilité certaine.

    Je dis pour car concrètement, c'est une possibilité de plus offerte pour gérer certains types d'énumérations, libre à nous de s'en servir ou pas.

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    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.
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  10. #30
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Evidemment si > et < correspondent à la méthode compareTo, c'est vrai que cela deviendrait plus intuitif et donc plus facile d'utilisation. Sans cette correspondance, ça n'a aucune pertinence.
    Merci beaucoup!

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    je suis contre également. Une énumération n'implique pas forcément de relation d'ordre.
    De plus il me semble que le nom de la méthode "compareTo" est assez parlant pour les cas où on en a besoin pour ne pas ajouter une nouvelle syntaxe pouvant elle preter à confusion.

  12. #32
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    Bonjour

    J'aime bien les enums, je suis plutôt pour...

    Les valeurs des types énumérés implique forcément une relation d'ordre, celle de sa position dans le type énumérés.
    Ça ne me choque pas de pouvoir simplement comparer la position de l'enum par rapport à un autre.


    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
     
    enum Message{
    INFO,
    WARNING,
    ERROR,
    FATAL;
     
        @Override
        public String toString() {
            if ( this > WARNING) {
            //Au secours
            }
             ...
        }
    }

  13. #33
    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
    Citation Envoyé par tnodev Voir le message
    Ça ne me choque pas de pouvoir simplement comparer la position de l'enum par rapport à un autre.
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    enum Message{
    INFO,
    WARNING,
    ERROR,
    FATAL;
     
        @Override
        public String toString() {
            if ( this.ordinal() > WARNING.ordinal()) {
            //Au secours
            }
             ...
        }
    }
    T'as gagné !
    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

  14. #34
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    T'as gagné !
    Ouais !!!
    J'ai gagné quoi ? des chocolats, des places pour l'Euro... ?

  15. #35
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je suis plutôt contre.

    Pour moi, le besoin de comparaison pour un type énuméré est savoir s'ils sont égaux et pas de définir une relation d'ordre particulier.

    Si l'énumération a besoin de définir un ordre (exemple avec niveau de log), alors c'est le développeur qui doit prendre ça en charge.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  16. #36
    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
    Citation Envoyé par fabszn Voir le message
    Si l'énumération a besoin de définir un ordre (exemple avec niveau de log), alors c'est le développeur qui doit prendre ça en charge.
    Pour utiliser l'ordre naturel il y a #ordinal() qui peut être utilisé, ça fait 10 caractères de plus que ce qui est demandé dans cette proposition, c'est pas la mort je pense.
    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

  17. #37
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par natha Voir le message
    Pour utiliser l'ordre naturel il y a #ordinal() qui peut être utilisé, ça fait 10 caractères de plus que ce qui est demandé dans cette proposition, c'est pas la mort je pense.
    Si, c'est ça le progrès, pouvoir se passer d'une dizaine de caractère

  18. #38
    Membre confirmé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 553
    Points
    553
    Par défaut
    Je suis pour

    Mais il est vrai cependant que les opérateur <, >, >= et <= n'ont aucun sens. Seul == et != sont correcte à mon sens.

  19. #39
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    il y a peu etre un interet quelque part, dans la technique, dans les couches basses, dans les limbes...

    Un objet n'est généralement pas indexé dans son ensemble, surtout si cet ensemble est défini en extension, comme c'est le cas pour les énumérations.

    Lorsque l'on défini l'ensemble des planètes de notre système solaire, on fait une énumération, et on a tendance à les indexer du soleil vers les aliens.
    Notre énumération n'est donc pas une liste définie en compréhension, et de ce fait la comparaison par indexation n'a pas de sens.

    Conclusion: je suis contre (et contre le javascript aussi).

    D'autre par, quand on compare deux planètes, c'est rarement sur cet aspect, qui n'est même pas un attribut de l'objet planète. Cette variable se trouve dans une autre table normalement. On fait des comparaisons sur des variables masses, spectre etc... et donc le compareto devient un myPlanete.comparteTo(yourPlanete, attribut). On a un problème de contexte. Le compareto est vide de sens. Sinon il faudrait pouvoir tagger un attribut comme étant le discriminant.

  20. #40
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par Alec6 Voir le message
    Un objet n'est généralement pas indexé dans son ensemble, surtout si cet ensemble est défini en extension, comme c'est le cas pour les énumérations.


    Citation Envoyé par Alec6 Voir le message
    D'autre par, quand on compare deux planètes, c'est rarement sur cet aspect, qui n'est même pas un attribut de l'objet planète. Cette variable se trouve dans une autre table normalement. On fait des comparaisons sur des variables masses, spectre etc... et donc le compareto devient un myPlanete.comparteTo(yourPlanete, attribut). On a un problème de contexte. Le compareto est vide de sens. Sinon il faudrait pouvoir tagger un attribut comme étant le discriminant.
    Le but n'est pas de disserter s' il y a un intérêt ou non à comparer des enums (et actuellement on peut la faire par rapport à la position de l'enum), mais de savoir si le supérieur/inférieur peut remplacer le compareTo() pour gagner une dizaine de caractère !

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