Question

Je ne l'ai jamais compris pourquoi l'aide d'un faire en boucles est nécessaire. Je comprends ce qu'ils font, ce qui est d'exécuter le code que la boucle while contient sans vérifier si la condition est vraie première.

Mais n'est pas le code ci-dessous:

do{
    document.write("ok");
}
while(x == "10");

La même exacte que:

document.write("ok");
while(x == "10"){
    document.write("ok");
}

Peut-être que je suis être très stupide et manque quelque chose évidente mais à je ne vois pas l'avantage d'utiliser faire en sur mon exemple ci-dessus.

Était-ce utile?

La solution

Votre code exemple est erroné:

do{
    document.write("ok");
}while(x == "10"){
    document.write("ok");
}

Ce serait la forme réelle:

do {
    document.write("ok");
} while(x == "10");

Vous avez raison qu'il exécute le bloc de code interne avant de vérifier la condition, mais il n'a pas besoin de dupliquer le bloc de code interne la façon dont vous l'avez. Le do / while construction est (comme vous l'avez déjà dit) un moyen de faire en sorte qu'un morceau de code est exécuté 1 fois ou plus au lieu de 0 ou plusieurs fois (en fonction du conditionnel).

Autres conseils

  • Comme vous le voyez, vous deviez répéter la ligne même dans le second exemple. Lorsque vous maintenez, vous voulez probablement ces deux lignes soient identiques, mais vous avez vous répète .

  • Imaginez maintenant que c'était un grand bloc et non une ligne, non seulement il prendre visuel précieux inutile espace , mais il sera également plus difficile à maintenir et attirer incohérences .

faire tout se déroulera au moins une fois - vous laisser faire, alors ... alors que tout exige la condition se sont réunis pour commencer du tout ..

var i = 6;
do{
    alert(i);
}while( i < 5)

// alerts 6, but while criteria isn't met so it stops

var i = 6;
while( i < 5) {
  alert(i);
}

// no output - while condition wasn't met

Qu'en est-il:

do{

   //.....
   // 100000 lines of code!
   //.....

} while(i%10);




Bien sûr, vous pas écrire que:

//.....
// 100000 lines of code!
//.....

while(i%10){

   //.....
   // 100000 lines of code!
   //.....

} 


Et vous serez alors obligé d'utiliser un do-while
God Bless it !!

Edit: Ou vous utiliserez les procédures ..

La différence est plus importante lorsque vous avez plus d'une ligne de code à exécuter au moins une fois. Une boucle de simulation de faire avec une boucle while entraînerait la duplication de code important, ce qui est toujours mauvais. Certes, une meilleure solution est de factoriser ce code dans une méthode et alors simplement le même appel de méthode avant et dans la boucle, mais beaucoup de gens n'aiment pas même beaucoup double emploi, et en utilisant le mot-clé do déclare sans ambiguïté « ceci est une commande au pied boucle".

Ainsi, fondamentalement, la lisibilité et la base des principes SE.

L'une meilleure façon d'écrire du code:

int count = ReadDataFromStream();
while(count != 0)
{
    count = ReadDataFromStream();
}

Peut être écrit à l'aide do-while comme:

int count = 0;
do
{
    count = ReadDataFromStream();
} while(count != 0);

Il y a de meilleurs exemples de do-temps, mais je ne pouvais pas rappeler à ce moment.

Qu'est-ce que vous manque est que votre utilisation de do...while ci-dessus est de 100% MAUVAIS

Une boucle de do...while en Java, par exemple, ressemble à quelque chose comme ceci:

do {
  //something you want to execute at least once
} while (someBooleanCondition);

Voir que l'absence totale d'un second bloc là-bas? Voyez comment le while se termine la déclaration complètement? Alors qu'est-ce qui se passe maintenant est que le code de la paire de {...} entre do et while va s'exécuter, puis someBooleanCondition va se faire tester et s'il est vrai, le bloc de code sont exécutées à nouveau. Et encore. Et encore. Jusqu'à ce que someBooleanCondition est testé faux.

Et à ce moment, peut-être, vous comprendrez pourquoi nous avons deux formes de boucle. pourrait se traduire par le code ci-dessus:

//something you want to execute at least once
while (someBooleanCondition) {
  //something you want to execute at least once
}

Ce code, cependant, vous devez taper le même (potentiellement important et complexe) code deux fois, en laissant la porte ouverte pour plus d'erreurs. D'où la nécessité d'une boucle test en bas au lieu d'une boucle supérieure test.

D'abord votre syntaxe do..while est erroné. Il est comme ceci:

do
{
  document.write("ok");
}while(x=="10");

Il est utile lorsque vous voulez exécuter le corps de la boucle au moins une fois sans évaluer son état de teminating. Par exemple, disons que vous voulez écrire une boucle où vous invitant l'utilisateur pour l'entrée et en fonction de l'entrée exécuter du code. Vous voulez ceci pour exécuter au moins une fois, puis demander à l'utilisateur s'il veut continuer. Dans de tels cas, les résultats de la boucle dans le code do..while moindre et plus propre par rapport à une boucle de while.

Bien que

do { 
    s1;
    ...
    sn;
} while (p);

pourrait être écrit comme

boolean done = false;
while (!done) {
    s1;
    ...
    sn;
    done = !p;
}

le premier est plus compréhensible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top