[Newbie] Vous préferez quoi : Case ou des If imbriqués ?

Vous préferez quoi : Case ou des If imbriqués ? [Newbie] - Programmation

Marsh Posté le 24-03-2002 à 01:12:46    

Je sais pas si ca existe pour tous les langages...
 
en algo ca donne :  
 

Code :
  1. SELON CAS
  2. CAS condition 1
  3.      traitement 1
  4. CAS condition 2
  5.      traitement 2
  6. CAS condition x
  7.      traitement x
  8. CAS autre
  9.      traitement autre
  10. FINCAS
  11. et pour IF
  12. SI
  13.    ALORS
  14.        SI
  15.           ALORS
  16.           SINON
  17.        FINSI
  18.    SINON
  19.        SI
  20.           ALORS
  21.           SINON
  22.        FINSI
  23. FINSI


 
Vous préférez quelle méthode, et pourquoi ?

 

[jfdsdjhfuetppo]--Message édité par Jubijub--[/jfdsdjhfuetppo]


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 24-03-2002 à 01:12:46   

Reply

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.....

Reply

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

Reply

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...
 
@++


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 24-03-2002 à 09:46:29    

Le Case  :bounce:


---------------
༼ つ ◕_◕ ༽つ
Reply

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.

Reply

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.

Reply

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


---------------
༼ つ ◕_◕ ༽つ
Reply

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 :D

Reply

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 :D  




t'es pas sympa, perso, je commence à apprécier, ne serait-ce que pour la portabilité


---------------
༼ つ ◕_◕ ༽つ
Reply

Marsh Posté le 24-03-2002 à 10:47:22   

Reply

Marsh Posté le 24-03-2002 à 11:37:37    

Ben moi je préfère des fonctions virtuelles et des classes dérivées :D

Reply

Marsh Posté le 24-03-2002 à 14:53:43    

arf vous m'avez fait peur sur le C++ ...
 
même en script VDbase 5.5 on peut le faire :D ...c d'ailleurs tout chelou comme language, c  un mélange de Dos shell, de basic et de pascal...


---------------
Jubi Photos : Flickr - 500px
Reply

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.  




??

Reply

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...


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

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 :D  




 
Bien vu, moi aussi  ;)


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

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

Reply

Marsh Posté le 24-03-2002 à 16:26:30    

le probleme du case, c'est que tu ne peux comparer qu'a des constantes

Reply

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


---------------
༼ つ ◕_◕ ༽つ
Reply

Marsh Posté le 24-03-2002 à 17:55:15    

c vrai que tu peux faire une procédure de translation en string pour comparer...


---------------
Jubi Photos : Flickr - 500px
Reply

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

Reply

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 :o

Reply

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é :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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.

Reply

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 :
  1. switch (nbChambres) {
  2.   case 0 :
  3.     print "aucune chambre";
  4.   case 1 :
  5.     print "une chambre";
  6.   case 2 :
  7.     print "deux chambres";
  8.   default :
  9.     print "plein de chambres";   
  10. }


 
mais je dois etre de la vieille ecole..
 
LEGREG

Reply

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.




 
:heink:
C'est quoi le rapport ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-03-2002 à 19:27:32    

Le rapport entre mon post et le topic ou entre les switch et le polymorphisme ?

Reply

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...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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.

Reply

Marsh Posté le 26-03-2002 à 20:53:03    

moi je débute en prog :D


---------------
Jubi Photos : Flickr - 500px
Reply

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é !


---------------
Tout cul tendu mérite son dû
Reply

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 !

Reply

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

Reply

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


---------------
Jubi Photos : Flickr - 500px
Reply

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 ;-)


---------------
Tout cul tendu mérite son dû
Reply

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


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 28-03-2002 à 16:57:52    

c quoi des hash ?
 
sous linux si tu met ca comme paramètre lors d'une décompression quelconque, ca te met des  ########### de progression....mais en prog ?


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed