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 for che 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:

  1. Valuta la parte test esattamente come fosse una espressione:
    • se l’espressione restituisce il valore true, allora l’interprete passa allo step 2, altrimenti allo step 4.
  2. Esegue il codice scritto nella parte body.
  3. Ritorna allo step 1.
  4. 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 test tra parentesi graffe {...} per impedire che le variabili utilizzate per il test vengano 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.