If/elseif/else ou if imbriqués ?

Résolu
fdev9 Messages postés 20 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 26 juin 2006 - 27 avril 2006 à 16:27
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 1 mai 2006 à 15:38
Bonjour,

J'ai une petite question concernant la structure if/elseif/else.

Je suis adepte du codage suivant :

if ( cas1.. )
{
...
}
else if ( cas2 ... )
{
...
}
...
else
{
...
}

Mon ami est adepte lui du codage suivant :

if (cas1 ...)
{
  ...
}
else
{
   if ( cas2 ... )
  {
   ...
  }
  ....
     else
    {
        ....
    }
}

Ma question est très simple :  La différence entre ces deux codages est elle uniquement au niveau de l'affichage (indentation du code, lisibilité) ou ces deux manières de coder ont elles des conséquences à l'execution (performance, etc...) ?

Merci d'avance.
fd.

9 réponses

dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
27 avril 2006 à 16:35
Bonjour fdev9,
J'ai fait un test rapide avec deux méthodes utilisant les deux façons de coder, et il apparaît que le code MSIL généré pour les deux méthodes est strictement identique. Donc effectivement, la différence entre ces deux manières de coder la même chose n'est qu'une question de présentation du code.
2
fdev9 Messages postés 20 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 26 juin 2006
27 avril 2006 à 16:45
Merci pour cette réponse rapide dgouttegattat.

Le code MSIL est identique, le compilateur fait donc bien son travail lors de la génération (heuresement)

Bon, bah je vais essayer d'aller convaincre mon ami que le temps de compilation est plus rapide avec un elseif lol

Plus sérieusement, vu qu'il ne s'agit que d'une question de présentation, à moins qu'il existe des conventions qui préconisent l'utilisation du elseif, je crois bien que je vais devoir me faire aux if imbriqués de mon ami :)

Chacun ses préférences donc.
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
27 avril 2006 à 23:26
Oui chacun ces preferences :)
Mais je trouve l'utilisation de if imbriqué plus lisible personnelement ...

Apres ... ben soit il faut ce référencer aux "naming convention" ou a la chartre de ton entreprise ... et apres ben c'est plus question de preferences :(
0
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
28 avril 2006 à 10:01
salut,

puisque vous parlez de performance, le switch ...case ne serait-il pas plus rapide??? Personellement, je trouve ça beaucoup plus lisible que des if.. else imbriqués.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
28 avril 2006 à 10:19
Salut,
Si mes souvenirs sont bons, le switch est plus rapide. Le problème, c'est qu'il ne peut pas remplacer tout le temps un elseif (étant donné que le switch ne marche que sur une variable).

<hr>
[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever /infomsg/auteurdetail.aspx?ID=13319/infomsg/auteurdetail.aspx?ID=13319/infomsg/auteurdetail.aspx?ID=13319/infomsg/auteurdetail.aspx?ID=13319/auteurdetail.aspx?ID=13319/auteurdetail.aspx?ID=13319/auteurdetail.aspx?ID=13319/auteurdetail.aspx?ID=13319/auteurdetail.aspx?ID=13319
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
28 avril 2006 à 12:03
Salut,
Le code MSIL généré pour une méthode utilisant un switch..case est plus long que pour une méthode faisant exactement la même chose mais avec des else..if (imbriqués ou non).


Toutefois, je ne suis pas sûr que la taille du code MSIL soit le seul critère pour juger de la performance d'un code. Je me souviens vaguement avoir lu dans un livre consacré à l'assembleur quelque chose du genre: "En assembleur, plus le code est long, plus ça va vite..."
0
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
28 avril 2006 à 12:06
C'est vrai, mais quand c'est possible, mieux vaut utiliser un switch case.
0
fdev9 Messages postés 20 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 26 juin 2006
28 avril 2006 à 13:11
"Le problème, c'est qu'il ne peut pas remplacer tout le temps un elseif (étant donné que le switch ne marche que sur une variable)."

Ma question portée bien pour des cas où le switch n'est pas possible.

Merci pour vos réponses.
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
1 mai 2006 à 15:38
Personnellement, j'utilise la méthode de ton ami car elle me parait plus lisible. La séparation des blocks est claire.
Maintenant, pour l'optimisation... Je suis pas sur que de gagner 1 nanoseconde dans une application .NET soit vraiment d'actualité; à moins de faire du DirectX managed =)
0