50 votes

Quelle boucle est la plus rapide, while ou for ?

Vous pouvez obtenir le même résultat avec des boucles for et while :

Tandis que :

$i = 0;
while ($i <= 10){
  print $i."\n";
  $i++;
};

Pour :

for ($i = 0; $i <= 10; $i++){
  print $i."\n";
}

Mais lequel est le plus rapide ?

9 votes

Mesurez-les si vous le souhaitez (mais ils sont probablement égaux).

5 votes

Je vous parie qu'ils génèrent exactement le même code d'octets.

9 votes

for dans la plupart des langues est un sucre syntaxique pour un équivalent de while qui est à son tour un sucre syntaxique pour un ensemble d'étiquettes et d'informations. gotos dans l'assemblage ou l'IL. Compte tenu d'une mise en œuvre efficace de la spécification du langage, ils seront à peu près égaux. Certains langages incluent des "commentaires" internes donnant des indications aux décompilateurs/réflecteurs sur l'aspect du code original, ce qui aura un effet négligeable sur les performances. Je pense que vous constaterez que les plus grandes différences de temps d'exécution sont inhérentes à la programmation du système d'exploitation.

0voto

murgatroid99 Points 5099

Ils devraient être égaux. La boucle for que vous avez écrite fait exactement la même chose que la boucle while : elle définit $i=0 , l'impression $i et en incrémentant $i à la fin de la boucle.

0voto

jfrobishow Points 1609

Cela dépendra de l'implémentation de la boucle dans le langage, du compilateur, etc.

La plupart des compilateurs compilent exactement le même code exécutable, par exemple en CIL (.NET).

Source : vcsjones @ http://forums.asp.net/t/1041090.aspx

Quoi qu'il en soit, c'est dans le corps de la boucle que le temps de traitement sera passé, et non dans la manière dont vous itérez.

0voto

niclaslindgren Points 458

Je me posais la même question, j'ai donc cherché sur Google et j'ai atterri ici. J'ai fait un petit test en python (extrêmement simple) juste pour voir et voici ce que j'ai obtenu :

Pour :

def for_func(n = 0):
    for n in range(500):
        n = n + 1

python -m timeit "import for_func ; for_func.for_func()" > for_func.txt

10000 boucles, meilleur des 3 : 40,5 usec par boucle

Tandis que :

def while_func(n = 0):
    while n < 500:
        n = n + 1

python -m timeit "import while_func ; while_func.while_func()" > while_func.txt

10000 boucles, meilleur des 3 : 45 usec par boucle

0voto

mczarnek Points 1036

Les boucles for sont plus faciles à paralléliser que les boucles while en utilisant quelque chose comme OpenMP

Par conséquent, si le code à l'intérieur de la boucle prend suffisamment de temps, il convient d'utiliser la boucle for et de la paralléliser.

Pour de courts extraits de code, vous ne voudriez pas paralléliser car cela prendrait plus de temps de lancer un autre thread (une opération coûteuse) que de simplement terminer la boucle donc l'un ou l'autre semble être à peu près le même à en juger par les autres réponses.

-1voto

Randolpho Points 36512

Cela dépend du langage et très probablement du compilateur, mais ils devraient être équivalents dans la plupart des langages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X