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

Langage Java Discussion :

switch ou else if


Sujet :

Langage Java

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut switch ou else if
    Pourquoi préférer swtich plutôt qu' une succession de else if ?

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    A mon avis si tu as la possibilité d'utiliser un switch c'est mieux. Mais ce n'est pas toujours possible.Un switch ne peut s'utiliser que sur une variable de type primitif (pas d'objet).

  3. #3
    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
    Salut,

    Citation Envoyé par guigui5931
    Un switch ne peut s'utiliser que sur une variable de type primitif (pas d'objet).
    Ce n'est pas tout à fait vrai : le switch ne peut pas être utilisé avec tout les types primitifs mais seulement avec les types int ou compatible (short, char).

    De plus, avec Java 5.0 il peut être utilisé avec les enums qui sont des objets


    Quand à l'intérêt du switch, c'est bien sûr la lisibilité

    a++

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Par défaut
    Le switch te permet de ne pas effectuer tous les tests.

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par illegalsene
    Le switch te permet de ne pas effectuer tous les tests.
    Euh ça c'est faux à ma connaissance ....

    P.S. : bientôt les switch sur les String certainement, mais va encore falloir attendre un peu

  6. #6
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    tous les tests tu dis? Si tu me dire comment faire un "et" ou un "ou" dans un switch je t'écoute.

    Par exemple, remplace le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(a && b)
       truc;
    else if(c || d)
       bazar;
    else
       bidule;
    par un code switch plus clair...

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut
    Citation Envoyé par chtig
    Euh ça c'est faux à ma connaissance ....

    P.S. : bientôt les switch sur les String certainement, mais va encore falloir attendre un peu )
    Peut-être est-ce vous qui avez raison...

    Paraît que les else if sont tous testés alors qu' avec le switch, la programme va voir directement le cas (case ...) qui convient ou alors le default.

    Donc, le switch peut se révéler plus rapide que les esle if successifs. Qui dit le contraire ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Par défaut
    Je pense Que la question de la rapidite de se pose pas en Java. Nous ne sommes pas a un ou deux temps processeur pres. Les applications performantes doivent etre programmees en C++ et les applications programmees en Java doivent etre lisibles pour faliciter les mises a jour un point c'est tout. Vous n'etes pas d'accord.

  9. #9
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    @openWorld : 5000000000000 fois d'accord
    @Razgriz : relis la phrase, tu as lu trop vite la négation ...
    @raph707 : ah, jamais entendu ça moi ... mais c'est possible. Quelqu'un confirme ? (juste pour la curiosité car cf point 1 je m'en moque globalement)

  10. #10
    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 chtig
    @raph707 : ah, jamais entendu ça moi ... mais c'est possible. Quelqu'un confirme ? (juste pour la curiosité car cf point 1 je m'en moque globalement)
    Lorsque tu utilises des if ils sont exécuté les uns à la suite jusqu'à trouver le bon résultat.

    Quand au switch, le compilateur utilise une table qui associe un numéro de ligne à chaque valeur, et se contente ensuite de faire un goto...

    a++

  11. #11
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par adiGuba
    Lorsque tu utilises des if ils sont exécuté les uns à la suite jusqu'à trouver le bon résultat.

    Quand au switch, le compilateur utilise une table qui associe un numéro de ligne à chaque valeur, et se contente ensuite de faire un goto...

    a++
    Merci pour l'info, je suis maintenant moins bête qu'il y a 5 minutes

  12. #12
    Membre expérimenté Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Par défaut
    Moi aussi j'ai entandu qu'un switch c'était plus rapide qu'une suite de else if, peut-être pas énormément pour quelques uns mais s'il y a pas mal de possibilités ça doit être plus rapide.

    Sinon pour le soucis de performences moi je ne suis pas trop d'accord, les programmes Java ne sont pas moins performant que les programmes en c++, pour certaines opérations ils sont certe plus lent, mais pour d'autre plus rapides... La lisibilité je pense qu'elle doit être aussi bien pour tout programme, un peu de commentaire ça peut pas faire de mal...

    Sinon un autre avantage des switch c'est que ça permet d'effectuer différentes suite d'évènements (enfin je sais pas trop comment tourner ça, mais en sans mettre les break, ça permet de faire par exemple l'action 1,2 et 3 pour le premier cas, 2 et 3 pour le 2ème et 3 pour le 3ème par exemple...

  13. #13
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par Vikisme
    La lisibilité je pense qu'elle doit être aussi bien pour tout programme, un peu de commentaire ça peut pas faire de mal...
    Je ne pensais pas seulement lisibilité directe en disant ça, mais aussi architecture ...

  14. #14
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Ben excusez-moi mais pour l'architecture, si faire un switch revient à faire des goto même si on les voit pas, c'est vraiment pas cool du tout...

    Et l'association de numéros de lignes doit prendre du temps, à établir et à retrouver, problème ne se posant pas avec les if/else, je me demande pourquoi c'est plus rapide, tu es sur de ça?

  15. #15
    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 Razgriz
    Ben excusez-moi mais pour l'architecture, si faire un switch revient à faire des goto même si on les voit pas, c'est vraiment pas cool du tout...
    Je parle au niveau du bytecode ! Le goto est utilisé par toutes les structures de controles (if/else, while, try/catch, etc.).

    C'est vrai qu'il ne faut pas l'utiliser directement dans le code (ce n'est d'ailleurs pas possible en Java), mais ce n'est pas pour autant qu'il n'est pas présent...

    Tu peux utiliser javap -c sur une classe pour t'en apercevoir

    Citation Envoyé par Razgriz
    Et l'association de numéros de lignes doit prendre du temps, à établir et à retrouver, problème ne se posant pas avec les if/else, je me demande pourquoi c'est plus rapide, tu es sur de ça?
    C'est plus rapide car une grande partie du travail est faite à la compilation...

    Attention je ne dis pas que la différence est énorme et qu'il faut utiliser l'un ou l'autre...

    a++

Discussions similaires

  1. [PHP 5.3] Différence de comportement switch/case et if/else
    Par ArKam dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2010, 14h31
  2. Transformer une condition if..else en switch
    Par Nyxin dans le forum Débuter
    Réponses: 7
    Dernier message: 14/09/2010, 14h04
  3. Passage de structure else if à switch case
    Par stefsas dans le forum C#
    Réponses: 1
    Dernier message: 13/07/2010, 10h47
  4. If /Else & Switch case avec plusieurs paramètres
    Par ralek dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 07/07/2010, 19h28
  5. [Système] switch ou if-then-else
    Par boniface dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 21h42

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