2010-06-09 21 views
7

Nunca he entendido por qué es necesario usar mientras que loops. Entiendo lo que hacen, que es ejecutar el código que contiene el ciclo while sin verificar si la condición es verdadera primero.¿Por qué usar un ciclo "do while"?

Pero no es el código de abajo:

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

exactamente el mismo como:

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

Tal vez estoy siendo muy estúpidos y perdiendo algo obvio a cabo, pero no veo la beneficio de usar hacer mientras que en mi ejemplo anterior.

+6

Dupe de http://stackoverflow.com/questions/994905/is-there-ever-a-need-for-a-do-while-loop – sharptooth

Respuesta

14

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 interior antes de check-in g la condición, pero no necesita duplicar el bloque de código interno como lo tiene. El constructo do/while es (como ya ha indicado) una forma de asegurarse de que un fragmento de código se ejecuta 1 o más veces en lugar de 0 o más veces (dependiendo del condicional).

+0

veo ahora, no se dio cuenta de que le ahorra forma tener que duplicar el código interno. Gracias por la ayuda. – Stanni

6

hacer mientras se ejecutará al menos una vez - lo que le permite hacer, mientras que ... donde como requiere la condición mientras se reunió 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 
2

La diferencia es más importante cuando tiene que ejecutar más de una línea de código al menos una vez. Simular un bucle do con un bucle while resultaría en una duplicación sustancial del código, que siempre es malo. Por supuesto, una mejor solución es refactorizar ese código en un método y luego simplemente tener la misma llamada de método antes y en el ciclo, pero a mucha gente le desagrada tanta duplicación, y al usar la palabra clave do se declara inequívocamente "esto es un control de pie lazo".

Por lo tanto, básicamente, legibilidad y principios SE básicos.

1

Lo que hace falta es que su uso de do...while arriba es 100% ERROR!

Un do...while bucle en Java, por ejemplo, se ve algo como esto:

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

Ver que la completa falta de un segundo bloque de allí? Vea cómo el whilefinaliza la declaración por completo? Entonces, ¿qué sucede ahora es que el código en el {...} par entre do y while se ejecutará, y luegosomeBooleanCondition se probarán y si es cierto, el bloque de código se ejecutará de nuevo. Y otra vez. Y otra vez. Hasta someBooleanCondition se prueba falso.

Y en este punto, tal vez, comprenderá por qué tenemos ambas 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 la misma (potencialmente grande y complicado) código dos veces, dejando la puerta abierta para más errores. De ahí la necesidad de un bucle de prueba de fondo en lugar de un bucle de prueba superior.

1

En primer lugar, su sintaxis do..while es incorrecta. Es así:

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, supongamos que quiere escribir un bucle en el que está pidiendo al usuario que ingrese y, dependiendo de la entrada, ejecute algún código. Desea que esto se ejecute al menos una vez y luego pregunte al usuario si desea continuar. En tales casos, el resultado do..while produce un código menor y más limpio en comparación con un bucle while.

16
  • Como se puede ver que tenían que repetir la misma línea en el segundo ejemplo. Cuando mantiene, lo más probable es que quiera que esas dos líneas sean las mismas, pero tiene repitió usted mismo.

  • Ahora imagine que era un gran bloque y no una línea, no sólo va a tomar innecesaria preciosa espacio visual, pero también será más difícil mantener y atraer a inconsistencias.

0

Su una mejor manera de escribir código:

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

se pueden escribir con do-while como:

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

Hay mejores ejemplos de do-while, pero no pude recordar en este momento.

2

¿Qué hay de:

do{ 

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

} while(i%10); 




Por supuesto que no va a escribir que:

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

while(i%10){ 

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

} 



Y entonces se verá obligado a utilizar un do-while loop
God Bless it !!

Editar:
O que va a utilizar procedimientos ..

+0

¿Qué idiomas tienen do-while pero no hay procedimientos? –

+0

Probablemente podrías poner las 100,000 líneas de código en una función ... pero punto tomado. –

0

Aunque

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

podría escribirse como

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

el primero es más comprensible.