Ceci peut être une question stupide, mais comment l'efficacité d'une boucle de temps se compare-t-elle à celle d'une boucle? J'ai toujours appris que si vous pouvez em> utiliser A pour boucle, alors je devrais. Mais quelle est la différence entre: comparer à: p> Je sais dans ces exemples spécifiques La différence est comme .000000001% , mais quand on parle de grandes boucles complexes, quelle est la différence? p> p>
8 Réponses :
Cela dépendra légèrement de la langue, éventuellement, et peut-être sur le compilateur, mais la plupart des compilateurs modernes les traiteront comme exactement identiques et il n'y aura aucune différence. P>
Cela dépend du compilateur exact que vous utilisez. Dans votre exemple, un bon compilateur créera le même code de machine pour les deux options. P>
Pensez à la principale différence comme style: avec un Il est également beaucoup plus facile de faire une boucle infinie d'un pour code> boucle, vous ne devez pas rechercher la valeur initiale, le seuil et l'incrémentation. P>
pendant code> parce que vous avez oublié d'incrémenter. P>
Je pense que vous dessinez la mauvaise conclusion des conseils que vous avez reçus. P>
la raison (dans ce cas au moins) préférer le Le pour code> construire sur le pendant code> n'a rien à voir avec l'efficacité; Il s'agit de tout le code d'écriture qui exprime vos intentions de manière claire et facile à comprendre. P>
pour code> place la condition initiale, l'incrément et la sortie de sortie tout au même endroit, ce qui facilite la compréhension. Le pendant que code> la boucle les étends. Par exemple, dans votre échantillon, quelle est la valeur initiale de i? -Oh, tu as oublié de le préciser? - C'est le point. P>
+1; Je pense que vous avez résumé toutes les réponses les plus succinctement; Vous auriez dû obtenir la "réponse".
Eh bien, si la boucle est grande et complexe, cela ne comportera pas depuis la surcharge du code de boucle (pour ou tandis que) sera très bas ... p>
Quoi qu'il en soit, si vous voulez vraiment savoir, je suppose que c'est à vous de vérifier votre IDE, dans le code de montage. Ou vous pouvez utiliser une dissible pour vous regarder dans un exécutable. http://www.caesum.com/files/borg228.zip (AVERTISSEMENT: Il y a généralement beaucoup de gonflement dans .exe, si bonne chance!) p>
Mesure le. Même le code de montage ne vous dira pas ce que le processeur a réellement fait avec elle ...
Comme vous pouvez deviner la plupart de ces réponses, le principal avantage d'A pour boucle pendant une boucle tandis que la boucle est la lisibilité. A pour la boucle est beaucoup plus propre et beaucoup plus agréable à regarder. Il est également beaucoup plus facile de rester coincé dans une boucle infinie avec une boucle de temps. Je dirais que je suis d'accord avec vos enseignements que si vous pouvez utiliser A pour une boucle, vous devriez, aussi longtemps que vous vous en tenir à cela, vos expériences de programmation seront beaucoup plus agréables. P>
La différence de performance entre En général, vous devez utiliser J'espère que cela a du sens et aiderait. P> pour boucle code> et tandis que la boucle code> n'est pas un gros problème car les compilateurs modernes peuvent générer le même code de machine pour les deux boucles et deuxièmement, les deux boucles nécessitent les mêmes opérations: p>
pour boucle code> dans votre code pour les raisons suivantes: p>
tandis que la boucle code>, il aide donc une meilleure gestion de la mémoire. LI>
ol>
Comme mentionné dans toutes les réponses ici, tout compilateur décent compilerait les deux boucles dans le même code de la machine. P>
Votre code machine (prise de MIPS en tant que EX) serait un groupe de déclarations d'assemblage normales suivies d'une branche (Onequal / Notequal) dans les deux cas rendant votre efficacité cohérente. P>
Cependant, vous pouvez débattre sur le problème de style de codage ici (pas l'efficacité). P>
* Utilisation probable: Lorsqu'une collection d'articles existe déjà et que vous souhaitez y remonter et récupérer le nombre de fois qu'une certaine propriété apparaît. P>
tandis que les boucles: strong> p>
Vous n'êtes pas au courant de combien de fois la boucle va courir. Il existe un cas de sortie qui est défini / atteint pendant le moment où la boucle est en cours d'exécution (si vous souhaitez simuler une boucle, vous utiliserez quelque chose comme un compteur (code supplémentaire)) p> li>
Je ne sais pas à quel point votre boucle va augmenter. Votre incrément / prochain mouvement peut être réglé de manière dynamique. Bien que vous puissiez le faire dans A pour boucle, vous devrez rendre compte de l'incrément à chaque itération, ce qui entraîne un code illisible qui peut être évité lorsque vous utilisez une boucle tandis que si vous utilisez une boucle. P> LI>
ol>
* Utilisation probable: grepping un flux pour certaines données. Vous ne savez pas combien de temps le flux est donc votre cas de sortie lorsque le flux se termine. Comme il s'agit d'un flux et que vous obtiendrez peut-être une ligne de données par ligne, vous voudrez peut-être sauter sur des lignes blanches tout à fait rendant vos incréments non cohérents. P>
Vous devriez ajouter une étiquette, dire quelle langue c'est. Cela ressemble à c mais l'echo "raconte autre chose.
Le code est écrit en PHP (mais j'ai oublié les variables de $ avant les variables. À la hâte: p), mais la question était censée être pour la programmation générale. Cela ressemblerait aux réponses ci-dessous qu'il n'y a pas de différence exacte, cependant.