JavascriptProva

mercoledì 1 febbraio 2012

do...while e while.

Le mie peregrinazioni mentali mi portano a voler sezionare le stringhe.

Da qui vado ancora avanti con le associazioni di idee e mi trovo ai cicli Do...until.
< Una volta li praticavo, ma non mi ricordo questa sintassi, che peraltro è comune a diversi linguaggi di programmazione...

Rinfreschiamo le idee!
<script src="funzioni.js"></script>
<script>

function inizia(){
var n=1;
 do{
  n++;
 } while(n<10);
alert(n); 
}
 
</script>
<body onload="inizia()">

</body>

Ecco, ottengo una casella di avvertimento con il numero 10.
Il programma aumenta sempre di uno il numero n finchè resta valida la condizione n<10. Quando poi n arriva a 10 smette e prosegue con l'istruzione successiva alert(n).


Ora provo con il solo while.
<script src="funzioni.js"></script>
<script>

function inizia(){
var n=1;
while(n<10){
 n++;
}
alert(n); 
}
 
</script>
<body onload="inizia()">

</body>
Il risultato è analogo: 10.

Ma qual è la differenza fra le due forme?

Provo a tradurre in italiano...
Prima forma.
"Aumento n di uno. E' minore di 10? Sì. E allora continuo ad aumentare di uno. E' minore di 10? Sì. E allora continuo...". Quando n è uguale a 10: "E' minore di 10? No. E allora smetto di aumentarlo e vado avanti".

Seconda forma.
"n è minore di 10? Sì. E allora lo aumento di uno. E' minore di 10? Sì. E allora lo aumento di uno...". Quando n è uguale a 10: "E' minore di 10? No. E allora vado avanti.

Il risultato è lo stesso. La differenza è solo che nel primo caso l'istruzione viene eseguita una volta, prima di verificare se n è minore di 10, mentre nel secondo caso il processo viene bloccato in partenza.

Provo a costruirmi un codice nel quale si veda la differenza.
<script src="funzioni.js"></script>
<script>

function inizia(){
var n=10;
while(n<10){
 n++;
}
alert(n); 
}
 
</script>
<body onload="inizia()">

</body>
Ecco, partendo da un valore di n pari a 10, ottengo 10 perchè il programma ha verificato subito che n non è minore di 10 e il ciclo non è partito per niente.
Invece con questo:
<script src="funzioni.js"></script>
<script>

function inizia(){
var n=10;
do{
 n++
}while (n<10);
alert(n); 
}
 
</script>
<body onload="inizia()">

</body>
... ottengo 11, perchè la condizione non è stata verificata subito e quindi il ciclo è partito per una volta, prima di essere bloccato all'esecuzione della seconda operazione.

Nessun commento:

Posta un commento