2010-10-18 4 views
1

Je sais que ça ne va pas être le même dans toutes les langues, mais c'est quelque chose que je me suis demandé pendant un certain temps.Y a-t-il une différence technique entre sinon ... si/sinon si?

Étant donné que le titre est pas très clair, est-il une différence technique entre

if (...) { 
    // ... 
} else if (...) { 
    // ... 
} 

et

if (...) { 
    ... 
} else { 
    if (...) { 
     ... 
    } 
} 

Je sais que d'un point de vue pratique, ils font la même chose, et il sont des raisons de lisibilité pour choisir l'une par rapport à l'autre, par exemple si la seconde if ne se rapporte pas directement à la première.

Mais d'un point de vue technique, je ne suis pas sûr. Est-ce que les compilateurs ont tendance à faire quelque chose de spécial avec un else if, ou est-il traité comme si elle était une seule chose en ligne, comme:

if (...) 
    singleLine(); 

mais ressemblant à:

else 
    if (...) // Counts as just a single line command 

espoir qui fait clairement ce que Je demande. Y a-t-il une différence technique entre les deux façons de procéder, et y a-t-il un inconvénient à utiliser le style else { if?

+0

Ce n'est pas vraiment agnostique de la langue. Un compilateur C est probablement assez intelligent pour générer le même code machine pour les deux blocs d'instructions. Cependant, un langage de script comme PHP générerait probablement plus de codes op (instructions) pour le second bloc. – mellowsoon

+0

@mellowsoon Fait sens, je suppose que j'ai mal interprété la bonne utilisation de la balise ici – Tarka

+0

"Optimisation du compilateur"? WTF? Sérieusement, les gens, ne sont pas là comme un milliard de paramètres qui affectent la performance au moins dix fois plus que cela?!? – delnan

Répondre

7

En C++, les deux sont exactement identiques. Découvrez la grammaire formelle. Dans l'exemple que vous avez donné, le if dans else if est vraiment un nouveau morceau de code, comme vous l'avez montré dans votre question, il est analogue à une seule ligne. La mise en forme et la disposition du code est plus agréable avec else if, cependant.

En gros, la grammaire définit:

<if structure> -> if <condition> <code blob> else <code blob> 
<code blob> -> <if structure> 

Alors, quand vous faites

if (1) do(); else if (3) stuff(); else thing();` 

toute la pièce

if (3) stuff(); else thing(); 

est juste le <code blob> de l'autre dans le premier cas/autre structure.

2

Je suis sûr que tout compilateur décent générera le même code pour les deux formes. La seule raison que je peux penser à l'utilisation de la deuxième forme est que vous vous attendez à ajouter du code à l'autre qui n'est pas contrôlé par le si inclus.

Questions connexes