Pregunta

Nunca he entendido por qué el uso de un hacer mientras bucles es necesario. Entiendo lo que hacen, que es para ejecutar el código que el bucle while contiene sin comprobar si la condición es verdadera en primer lugar.

Pero no es el siguiente código:

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

exactamente el mismo que:

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

Tal vez estoy siendo muy estúpidos y perdiendo algo obvio, pero no veo la ventaja de utilizar hacer mientras sobre mi ejemplo anterior.

¿Fue útil?

Solución

Su código de ejemplo es incorrecta:

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

Esta sería la forma real:

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

Tiene razón en que se ejecuta el bloque de código interno antes de comprobar la condición, pero no tiene que duplicar el código interno bloquear el camino que lo tienes. El do / while construcción es (como ya he dicho) una manera de asegurarse de que una pieza de código se ejecuta 1 o más veces en lugar de 0 o más veces (dependiendo de la condicional).

Otros consejos

  • A medida que ver lo que tenía que repetir el mismo la línea en el segundo ejemplo. Al mantener, lo más probable es que quiera esas dos líneas a ser los mismos, pero hay que repetirse a sí mismo .

  • Ahora imagine que era un bloque grande y no una línea, no sólo se tarda innecesaria precioso espacio visual , pero también será más difícil de mantener y atraer a inconsistencias .

hacer mientras se ejecutará al menos una vez - que le permite hacer, mientras que ... donde como requiere la condición mientras se reunieron para comenzar a todos ..

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é hay de:

do{

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

} while(i%10);




Por supuesto que no de escritura que:

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

while(i%10){

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

} 



Y a continuación, se ve obligado a utilizar una do-while
Dios lo bendiga !!

Editar
O que va a utilizar procedimientos ..

La diferencia es más importante cuando se tiene más de una línea de código que se ejecutará al menos una vez. Simulación de un ciclo do con un bucle while que implicaría un doble código sustancial, que siempre es malo. Por supuesto, una mejor solución es refactorizar el código en un método y luego simplemente tienen la misma llamada al método antes y en el bucle, pero muchas personas no les gusta ni siquiera eso la duplicación, y el uso de la palabra clave do declara sin ambigüedad "se trata de un pie-controlado lazo".

Así que, básicamente, la legibilidad y principios básicos SE.

Su mejor manera de escribir código:

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

Puede ser editada en el do-while como:

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

Hay mejores ejemplos de do-while, pero no podía recordar en este momento.

Lo que se está perdiendo es que el uso de do...while anterior es 100% MAL

Un bucle do...while en Java, por ejemplo, es como la siguiente:

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

Vea que completa falta de un segundo bloque de allí? Ver cómo el while extremos la declaración por completo? Entonces, ¿qué sucede ahora es que el código en el par {...} entre do y while conseguirá ejecutada, después someBooleanCondition se hagan un examen y si es verdad, el bloque de código obtendrá ejecutado de nuevo. Y otra vez. Y otra vez. Hasta someBooleanCondition se probó falsa.

Y en este punto, tal vez, vas a entender por qué tenemos dos formas de bucle. El código anterior se podría traducir a:

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

Este código, sin embargo, requiere que escriba el mismo código (potencialmente grande y complicado) dos veces, dejando la puerta abierta para más errores. De ahí la necesidad de un bucle de prueba inferior en lugar de un bucle de prueba superior.

En primer lugar la sintaxis do..while está mal. Es de esta manera:

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

Es útil cuando se desea ejecutar el cuerpo del bucle al menos una vez sin evaluar su condición teminating. Por ejemplo, digamos que usted quiere escribir un bucle en el que se solicite al usuario de entrada y dependiendo de la entrada ejecutar algún código. Le gustaría que este se ejecute al menos una vez y luego pedir al usuario si desea continuar. En tales casos, los resultados de bucle do..while en código menor y más limpio en comparación con un bucle while.

Aunque

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

podría escribir como

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

El primero es más comprensible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top