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