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: Êtes-vous pour ou contre cette proposition ?

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

    404 85,77%
  • Contre

    67 14,23%
Langage Java Discussion :

JDK 7: Proposition 4 : possibilité d'utiliser les String dans les switch case -> Intégrée [Débat]


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé


    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
    Par défaut JDK 7: Proposition 4 : possibilité d'utiliser les String dans les switch case -> Intégrée
    Aujourd'hui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    static boolean booleanFromString(String s) {
        if (s.equals("true")) {
            return true;
        } else if (s.equals("false")) {
            return false;
        } else {
            throw new IllegalArgumentException(s);
        }
    }
    Demain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    static boolean booleanFromString(String s) {
        switch(s) {
          case "true":
            return true;
          case "false":
            return false;
          default:
            throw new IllegalArgumentException(s);
        }
    }

  2. #2
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Bonjour,

    Voila une nouveauté qui serait vraiment utile.

    Je suis à 100% pour.

    Fini les if, else if, if à rallonge. Les cases apportent beaucoup de clarté au code. Donc il est + maintenable.

    A+
    Gronono

  3. #3
    Membre émérite 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 : 41
    Localisation : France, Hauts de Seine (Île de France)

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

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

    J'ai voté pour mais j'ai quand même une petite question. Est ce que cette fonctionnalité inclue le fait de pouvoir comparer les chaines avec l'opérateur == en toute tranquillité ?

    Merci

    [edit]
    du coup ça me fait penser à une autre fonctionnalité qui peut être cool:
    utiliser les opérateurs <, >, <=, >= (pas le == évidemment) sur des objets de type Comparable appelle automatiquement la méthode compareTo... je suis trop gourmand ? Il faudrait voir si cette question n'est pas mieux dans la proposition 3.
    [/edit]

    Yann

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Pour à 200%, j'ai toujours trouvé que le switch sur String était un manque dans de nombreux langages.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 171
    Par défaut
    J'ai voté pour, mais finalement apres reflexion cela ne serait plus cohérent par rapport a l'opérateur == comme disait "yann2".
    Cela reviendrais a dire que le type String est un type primitif.

    Plutot contre en faite (mince je lui premier)

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par metalpetsFR Voir le message
    Cela reviendrais a dire que le type String est un type primitif.
    String est quand même un type bien particulier

    a++

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Je ne vois pas en quoi le case changerais le s.equals(string) !!!

    En tout cas je suis pour à 100%, je trouve que c'est un manque dans certain cas.

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

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Par défaut
    Moi je ne suis pas pour !

    C'est pratique quand tu fais du php, mais en java ca fait grado.
    Vu que les string seront de toute facon en dur dans les cases, il est plus préférable de porter l'utilisation des Enumérations dans ce cas.

  9. #9
    Membre expérimenté
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Par défaut
    Je trouve ça effectivement joli et séduisant. mais comme dit n!co, un switch de String reste de toutes façons crado.
    Et vu qu'il a beaucoup de propositions de sucre syntaxique, je ne veux pas qu'il y en ait trop, au risque de compliquer le langage.

  10. #10
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Je suis pour, je trouve que ça peut simplifier le code, sans mettre trop de complexité...

    Quant au fait de pouvoir utiliser le switch en utilisant le ==, je ne sais pas trop comment cela se matérialiserait du point de vue écriture du code java...
    A ce niveau là, aussi pourquoi ne pas proposer une comparaison des Strings en ignorant la casse (en gros, que l'on puisse utiliser le equalsIgnoreCase("") au lieu de equals("") ) ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    +1
    Ce serait bien pratique.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    Par défaut Pour. Mais il faut creuser plus loin...
    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.

  13. #13
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    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.

  14. #14
    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
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  15. #15
    Membre éclairé Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Par défaut
    Je suis pour aussi à 200%.
    Cà manquait vraiment et c' est très pratique !

  16. #16
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    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.

  17. #17
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    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++

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 75
    Par défaut
    Pas contre

    Je n'ai pas encore utilisé la méthode hashCode de la classe String. En attendant, je pense utiliser cette méthode

  19. #19
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

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

    L'utilisation du type String dans un switch() devrait renvoyer une erreur: "Apprenez a utiliser les enums."
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #20
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    Oui, entièrement contre.
    Cette discussion et le sondage sont intéressants : elle montre que beaucoup de gens préférent coder rapidement sans se soucier de la maintenance...

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/08/2009, 17h09
  2. Réponses: 2
    Dernier message: 07/06/2009, 19h54
  3. les classes et les templates dans les plugins
    Par asoka13 dans le forum C++
    Réponses: 22
    Dernier message: 24/01/2008, 17h11
  4. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  5. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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