Domanda

Non ho mai capito perché si utilizza un fare mentre loop è necessario. Capisco quello che fanno, che è quello di eseguire il codice che il ciclo while contiene senza controllare se la condizione è vera prima.

Ma non è il codice qui sotto:

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

L'esatto stesso come:

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

Forse sono molto stupido e manca qualcosa di ovvio fuori, ma non vedo il vantaggio di utilizzare fare mentre sopra il mio esempio di cui sopra.

È stato utile?

Soluzione

Il codice di esempio è sbagliato:

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

Questa sarebbe la forma attuale:

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

Lei ha ragione che viene eseguito il blocco di codice interno prima di controllare la condizione, ma non ha bisogno di duplicare il codice interno bloccare il modo in cui lo avete. Il do / while costrutto è (come hai già detto) un modo per assicurarsi che un pezzo di codice viene eseguito 1 o più volte, invece di 0 o più volte (a seconda del condizionale).

Altri suggerimenti

  • Come si vede si doveva ripetere la stesso Linea nel secondo esempio. Quando si mantiene, è molto probabile che vogliono quelle due righe per essere lo stesso, ma è necessario ripetuto da soli .

  • Ora immaginate che era un grande blocco e non una linea, non solo ci vorrà inutile prezioso visiva spazio , ma sarà anche più difficile da mantenere e attirare incoerenze .

fare mentre verrà eseguito almeno una volta - che ti permette di fare, mentre ... dove, come, mentre richiede la condizione incontrati per iniziare a tutti ..

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

Che dire:

do{

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

} while(i%10);




Naturalmente si non scrittura che:

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

while(i%10){

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

} 


E si sarà quindi costretto ad usare un do-while
Dio benedica !!

Modifica
O che si intende utilizzare procedure ..

La differenza è più importante quando si dispone di più di una riga di codice da eseguire almeno una volta. Simulazione di un ciclo do con un ciclo while si tradurrebbe in sostanziale duplicazione di codice, che è sempre un male. Certo, una soluzione migliore è quella di refactoring che il codice in un metodo e poi semplicemente hanno la stessa chiamata di metodo prima e nel ciclo, ma molte persone non amano nemmeno più di tanto la duplicazione, e utilizzando la parola chiave do dichiara senza ambiguità "questo è un piede-controllato ciclo continuo".

Quindi, in sostanza, la leggibilità e principi di base SE.

E 'un modo migliore di scrivere codice:

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

possono essere scritti utilizzando do-while come:

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

Ci sono migliori esempi di do-po ', ma io non riuscivo a ricordare in questo momento.

Quello che manca è che l'utilizzo del do...while sopra è al 100% SBAGLIATO

Un ciclo do...while in Java, per esempio, sembra qualcosa di simile:

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

Vedere che completa mancanza di un secondo blocco là? Guarda come la while estremità la dichiarazione del tutto? Quindi, ciò che accade ora è che otterrà eseguito il codice della coppia {...} tra il do e while, poi someBooleanCondition sarà fare il test e se è vero, il blocco di codice verrà nuovamente eseguito. E di nuovo. E di nuovo. Fino someBooleanCondition viene testato falso.

E a questo punto, forse, capirete perché abbiamo entrambe le forme di loop. Il codice di cui sopra potrebbe essere tradotto in:

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

Questo codice, tuttavia, richiede di digitare lo stesso codice (potenzialmente grande e complicato) due volte, lasciando la porta aperta per più errori. Da qui la necessità di un anello inferiore test invece di un ciclo top-test.

Prima di tutto la sintassi do..while è sbagliato. E 'in questo modo:

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

E 'utile quando si desidera eseguire il corpo del ciclo almeno una volta senza valutare la sua condizione teminating. Per esempio, diciamo che si desidera scrivere un ciclo in cui si sta chiedendo all'utente per l'input e seconda entrata eseguire del codice. Si vorrebbe questo per eseguire almeno una volta e poi chiedere all'utente se vuole continuare. In tali casi, risultati ciclo do..while nel codice minore e più pulito rispetto ad un ciclo while.

Anche se

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

potrebbe essere scritto come

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

il primo è più comprensibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top