Prima o poi bisogna saltar giù dalla giostra!
In questo articolo vedremo la struttura di controllo iterativa while.
In Tcl abbiamo anche la struttura di controllo iterativa
forche vedremo nel prossimo articolo.
Quando scriviamo un algoritmo che necessita di una iterazione (altrimenti detta: ciclo), molto spesso capita che entrambi i comandi while e for possano essere utilizzati indifferentemente.
La sintassi del comando while è la seguente.
while test {
body
}
Funzionamento del ciclo
Quando l’interprete incontra il comando while procede seguendo i seguenti passi:
- Valuta la parte
testesattamente come fosse una espressione:- se l’espressione restituisce il valore
true, allora l’interprete passa allo step 2, altrimenti allo step 4.
- se l’espressione restituisce il valore
- Esegue il codice scritto nella parte
body. - Ritorna allo step 1.
- Esce dal ciclo.
Se in un qualsiasi punto della parte body inseriamo l’istruzione continue, l’interprete salta immediatamente allo step 1.
Se invece inseriamo l’istruzione break, allora si passa immediatamente allo step 4 e si esce dal ciclo.
Siccome in Tcl tutti i comandi sono soggetti alla fase di sostituzione, è necessario racchiudere la parte
testtra parentesi graffe{...}per impedire che le variabili utilizzate per iltestvengano sostituite ad ogni iterazione con i loro valori.
Vediamo un esempio
Corretto
set x 1
set y 5
while {$x <= $y} {
puts "Now x is $x"
set x [expr {$x + 1}]
}
---
Now x is 1
Now x is 2
Now x is 3
Now x is 4
Now x is 5
Errato
set x 1
set y 5
while "$x <= $y" {
puts "Now x is $x"
set x [expr {$x + 1}]
}
---
Now x is 1
Now x is 2
Now x is 3
Now x is 4
Now x is 5
Now x is ... (ciclo infinito)
Nel prossimo articolo vedremo la struttura di controllo iterativa for.
