Pourquoi préférer swtich plutôt qu' une succession de else if ?
Pourquoi préférer swtich plutôt qu' une succession de else if ?
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).
Salut,
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).Envoyé par guigui5931
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++
Le switch te permet de ne pas effectuer tous les tests.
Euh ça c'est faux à ma connaissance ....Envoyé par illegalsene
P.S. : bientôt les switch sur les String certainement, mais va encore falloir attendre un peu![]()
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 :
par un code switch plus clair...
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;
Peut-être est-ce vous qui avez raison...Envoyé par chtig
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 ?
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.
@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)
Lorsque tu utilises des if ils sont exécuté les uns à la suite jusqu'à trouver le bon résultat.Envoyé par chtig
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 minutesEnvoyé par adiGuba
![]()
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...
Je ne pensais pas seulement lisibilité directe en disant ça, mais aussi architecture ...Envoyé par Vikisme
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?
Je parle au niveau du bytecode ! Le goto est utilisé par toutes les structures de controles (if/else, while, try/catch, etc.).Envoyé par Razgriz
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
C'est plus rapide car une grande partie du travail est faite à la compilation...Envoyé par Razgriz
Attention je ne dis pas que la différence est énorme et qu'il faut utiliser l'un ou l'autre...
a++
Partager