Refactoring : if, else if ou switch

muqaddarmuqaddar Administrateur
mars 2011 modifié dans Objective-C, Swift, C, C++ #1
Avis aux pros du C.  :o

En algo, quel est le plus rapide ?
Du peu que je sais, je crois que switch a été fait pour être rapide sur des multi-choix.

Exemple, avec ce genre de code :

if (self._type == kRACK_UMODULES) title = _T(kUmodules);<br />	if (self._type == kRACK_VMODULES) title = _T(kVmodules);<br />	if (self._type == kRACK_XBOTTLES) title = _T(kXbottles);<br />	if (self._type == kRACK_YBOTTLES) title = _T(kYbottles);


Après, il me semble que if...else est plus lent qu'une série de if (encore que c'est peut-être l'idéal si on pense que 90% des appels ne passeront que dans le premier if non ?)

Switch semble être l'idéal mais n'est pas toujours adapté à  des gros blocs de code à  l'intérieur (même si on peut appeler d'autres méthodes).

Réponses

  • cyranocyrano Membre
    mars 2011 modifié #2
    c'est bien comme ca, et tu laisses faire le compilo  :)

    l'optimisation de bouts de chandelle, ca sert a rien......
  • CéroceCéroce Membre, Modérateur
    18:33 modifié #3
    Dans le cas que tu présentes, on pourrait utiliser des if-else if ou un switch.
    Mais pas pour des questions de vitesse: parce que le code indique clairement que le choix n'est pas multiple. La lisibilité serait peut-être meilleure, quoi que.

    Dans le concept, utiliser les else if serait plus rapide puisque les cas suivants ne sont pas évalués. Cependant, on ne peut l'affirmer, car les conditions créent des ruptures de séquences qui rendent le fonctionnement non-linéaire, et rendent donc plus délicat le dispatch des instructions sur les pipelines du microprocesseur.
    Il faudrait mesurer, et pour ce bout de code qui doit être appelé très peu fréquemment, ça ne vaut pas le coup.

    Si je devais changer quelque chose à  ton code, ce serait plutôt les noms des constantes, qui me paraissent moyennement parlants.
  • muqaddarmuqaddar Administrateur
    18:33 modifié #4
    La question c'est peut-être : à  partir de combien de if vaut-il mieux passer dans un else if  ou dans un switch ?

    Switch n'est-il vraiment pas plus rapide sur une série de 100 if par exemple ?
  • CéroceCéroce Membre, Modérateur
    18:33 modifié #5
    En théorie, utiliser un switch est plus rapide parce que l'implémentation est une sorte de tableau indexé par la constante. En pratique, un bon compilateur va peut-être repérer la répétition des séquences de if et l'optimiser de la même façon.

    En règle générale, il faut écrire lisiblement. Les compilateurs ont été écrits par des êtres humains; ils marchent mieux quand le code est écrit de façon naturelle pour un humain.
  • muqaddarmuqaddar Administrateur
    18:33 modifié #6
    La suite de cette discussion dérivant vers les tableaux en C a été tronquée ici :
    http://pommedev.mediabox.fr/optimisation-refactoring-trucs-et-astuces/tableau-c-de-strings-global/msg69354/#msg69354
Connectez-vous ou Inscrivez-vous pour répondre.