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 ?
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 ?
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.
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
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.
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.
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 dewhile
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.13 votes
Il est probablement préférable que vous ne sachiez pas. Si vous utilisez la connaissance d'une possible optimisation prématurée pour influencer votre programmation, en choisissant un code légèrement plus rapide que la conception la plus lisible avant même de savoir si vous avez besoin de cette vitesse, vous échouez.
0 votes
En C : vous pouvez également comparer leur sortie asm :
gcc -S mycsource.c