Vous préferez quoi : Case ou des If imbriqués ? [Newbie] - Programmation
Marsh Posté le 24-03-2002 à 01:35:50
boaf depends des cas, generalement si il y a beaucoup de choix un switch/case est ptet mieux, si y'en a juste 2/3 if/else fera tres bien l'affaire.....
Marsh Posté le 24-03-2002 à 04:31:37
ca depend du langage
en Caml, le pattern matching trop fort.
En C/C++, ben tu ne peux faire un switch..case
que sur des types entiers donc c'est vite vu..
LEGREG
Marsh Posté le 24-03-2002 à 09:18:27
visuellement le selon cas est mieux, mais niveau compilation c'est moins bien il me semble...
@++
Marsh Posté le 24-03-2002 à 10:28:09
legreg a écrit a écrit : ca depend du langage en Caml, le pattern matching trop fort. En C/C++, ben tu ne peux faire un switch..case que sur des types entiers donc c'est vite vu.. LEGREG |
En c++ tu peux faire des swith/case sur des string aussi.
Marsh Posté le 24-03-2002 à 10:29:55
Mais sinon pour répondre à la question original, le case est bien plus lisible, flexible et permet au compilateur de choisir plus facilement la meilleur approche suivant le système.
Marsh Posté le 24-03-2002 à 10:30:05
gizmo a écrit a écrit : En c++ tu peux faire des swith/case sur des string aussi. |
Correct, par contre en Java on peut pas, et c'est bien embêtant
Marsh Posté le 24-03-2002 à 10:40:05
oui mais bon, si je devais dire tout le bien que je pense de java, je serais grossier
Marsh Posté le 24-03-2002 à 10:47:22
gizmo a écrit a écrit : oui mais bon, si je devais dire tout le bien que je pense de java, je serais grossier |
t'es pas sympa, perso, je commence à apprécier, ne serait-ce que pour la portabilité
Marsh Posté le 24-03-2002 à 11:37:37
Ben moi je préfère des fonctions virtuelles et des classes dérivées
Marsh Posté le 24-03-2002 à 14:58:58
gizmo a écrit a écrit : En c++ tu peux faire des swith/case sur des string aussi. |
??
Marsh Posté le 24-03-2002 à 15:15:50
Le case, c'est fait pour et en plus c'est clair.
Le if imbriqué, ça allait au temps du basic...
Marsh Posté le 24-03-2002 à 15:16:38
_gtm_ a écrit a écrit : Ben moi je préfère des fonctions virtuelles et des classes dérivées |
Bien vu, moi aussi
Marsh Posté le 24-03-2002 à 15:55:25
Pour un switch sur une string : je pense pas. Mais voici une petite proposition :
On prend une fonction qui à une chaine associe un nombre.
Comme on écrit des cases, on connait deja toutes les possibilités, donc on peut vérifier si la fonction donne bien un résultat différent pour chaque possibilité.
Et ensuite on fait le case sur les nombres calculés.
En gros, je propose d'utiliser une fonction de hachage et de faire le case sur le résultat. Il se peut même qu'en perf on y gagne, selon la fonction utilisée, car il n'y a qu'une opération sur des chaines à faire
Marsh Posté le 24-03-2002 à 16:26:30
le probleme du case, c'est que tu ne peux comparer qu'a des constantes
Marsh Posté le 24-03-2002 à 16:36:34
farib a écrit a écrit : le probleme du case, c'est que tu ne peux comparer qu'a des constantes |
voir plus haut, ca dépend des langages
Marsh Posté le 24-03-2002 à 22:48:47
gizmo a écrit a écrit : En c++ tu peux faire des swith/case sur des string aussi. |
tu as un exemple de code qui compile??
LEGREG
Marsh Posté le 24-03-2002 à 23:34:34
me suis trompé de nom, c'est pas des string, mais des char, honte sur moi
Marsh Posté le 25-03-2002 à 09:43:21
juju_le_barbare a écrit a écrit : visuellement le selon cas est mieux, mais niveau compilation c'est moins bien il me semble... @++ |
Moi j'avais entendu dire le contraire...
Ce qui semblerait logique, le compilateur crée son if de la manière la plus optimisée possible.
D'ailleurs un truc intéressant:
if expression then
valeur := 1
else
valeur := autrechose;
Il arrive que ce soit traduit par le compilateur en:
valeur := 1;
if not expression then
valeur := autrechose;
J'ai déjà observé ce phénomène dans Delphi, pas moyen de mettre un breakpoint sur valeur := 1 suivant le if, car la ligne n'existait pas dans le programme compilé
Marsh Posté le 25-03-2002 à 13:37:23
Ma remarque est un peu hors-sujet mais avec un bon design objet (donc avec un langage orienté objet, en général), l'emploi de switch ou de if imbriqués devrait vraiment être exceptionnel. Il est bien plus propre, lisible, extensible, maintenable (...) de faire jouer le polymorphisme.
Maintenant c'est sur que des fois ça dépanne, et qu'on ne peut pas toujours se permettre de reprendre le design pour éviter un switch à deux cas.
Marsh Posté le 25-03-2002 à 17:03:31
Matafan a écrit a écrit : Ma remarque est un peu hors-sujet mais avec un bon design objet (donc avec un langage orienté objet, en général), l'emploi de switch ou de if imbriqués devrait vraiment être exceptionnel. Il est bien plus propre, lisible, extensible, maintenable (...) de faire jouer le polymorphisme. |
design objet, design objet..
ca remplace juste le switch sur des types
pas sur des valeurs..
Code :
|
mais je dois etre de la vieille ecole..
LEGREG
Marsh Posté le 25-03-2002 à 17:29:36
Matafan a écrit a écrit : avec un bon design objet (donc avec un langage orienté objet, en général), l'emploi de switch ou de if imbriqués devrait vraiment être exceptionnel. Il est bien plus propre, lisible, extensible, maintenable (...) de faire jouer le polymorphisme. |
C'est quoi le rapport ?
Marsh Posté le 25-03-2002 à 19:27:32
Le rapport entre mon post et le topic ou entre les switch et le polymorphisme ?
Marsh Posté le 25-03-2002 à 20:04:52
Bhen je vois pas trop en quoi l'orienté objet peut éviter dans quasi tout les cas les switch et les if imbriqué
Ok pas besoin de faire des
if objet is TMachin then
else if objet is TTruc then
else if objet is TBrol then
...
Mais y a quand même d'autres utilisations...
Marsh Posté le 25-03-2002 à 20:33:25
Ben disons qu'il faut prendre le problème dans l'autre sens. Il ne s'agit pas de créer son arborescence d'objets puis de constater a posteriori que certains switch portent sur le type d'objet alors que d'autres portent sur un de leur attribut ; il s'agit de créer son arborescence d'objets de façon à ce que ces switch portent autant que possible sur des types d'objets.
On est d'accord, c'est pas toujours possible (enfin surtout, c'est pas toujours intéressant). Mais d'expérience, en java, j'en ai pas fait souvent des switch.
Marsh Posté le 27-03-2002 à 00:14:52
le CASE, c bcp mieux... sauf si tu n'as que 2 choix, mais sinon c le top quoi !
un IF/ELSE, c trop limité !
Marsh Posté le 27-03-2002 à 09:53:09
Matafan a écrit a écrit : Ma remarque est un peu hors-sujet mais avec un bon design objet (donc avec un langage orienté objet, en général), l'emploi de switch ou de if imbriqués devrait vraiment être exceptionnel. Il est bien plus propre, lisible, extensible, maintenable (...) de faire jouer le polymorphisme. Maintenant c'est sur que des fois ça dépanne, et qu'on ne peut pas toujours se permettre de reprendre le design pour éviter un switch à deux cas. |
comment prendre un canon pour tuer une mouche...
chaque fois que tu as des switch/case dans une fonction tu dois declarer une hierachie de classe ? bonjour l'efficacite !
Marsh Posté le 27-03-2002 à 10:29:31
En C, le switch pour la maintenance de code et la lisibilité, le if pour les cas avancés.
Eu niveau compil, le switch et les ifs imbriqués donnent a peu près le même code, sauf quand le nombre de case est elevé, ou le switch est plus optimisé/optimisable
Marsh Posté le 27-03-2002 à 22:46:19
donc case ou équivalent...
c surement une remarque conne, mais je trouve ca hyper lisible, et simple à maintenir...tu classes les occurences dans l'ordre décroissant de proba pour la rapidité, et tu met les récups d'erreur à la fin... ca donne
Case le plus probable
...
Case le moins probable
Case erreur la plus probable
Case erreur la moins probable
Marsh Posté le 28-03-2002 à 14:47:19
complètement d'accord avec toi Jubijub, c klair que pour la maintenance, c vraiment le mieux, et de toute façon, à la compil, c comme des if imbriqués.. donc je vois pas pourquoi se priver de ça lors du codage, vu que c plus simple et plus compréhensible... en plus y'a moins de risque d'erreur de syntaxe..
CASE poweeeeeeeeeer ;-)
Marsh Posté le 28-03-2002 à 15:12:38
En PERL, j'ai pris l'habitude de gérer mes switch par des hash, chaque clé représente un choix possible
Ca donne parfois un truc illisible mais l'expression apparaît sur une seule ligne
Marsh Posté le 24-03-2002 à 01:12:46
Je sais pas si ca existe pour tous les langages...
en algo ca donne :
Vous préférez quelle méthode, et pourquoi ?
[jfdsdjhfuetppo]--Message édité par Jubijub--[/jfdsdjhfuetppo]
---------------
Jubi Photos : Flickr - 500px