Abbiamo visto che esistono costrutti per verificare condizioni, o anche per verificare in modo semplice e veloce molte ugualiglianze.
Ora vedremo i cicli o costrutti iterativi (dal latino iter, itineris = "viaggio", ma anche "per la seconda volta"). Essi hanno il compito di ripetere un blocco di istruzioni
un numero determinato o indeterminato di volte. Il primo che analizzeremo è, appunto, il costrutto Do Loop, di cui esistono molte varianti.
La più semplice è ha questa sintassi:
Suggerimento
Per impostare il valore di Default (ossia il valore predefinito) di una variabile si può usare questa sintassi:
Do 'istruzioni LoopIl suo compito consiste nel ripete delle istruzioni comprese tra Do e Loop un numero infinito di volte: l'unico modo per uscire dal ciclo è usare una speciale istruzione: "Exit Do", la quale ha la capacità di interrompere il ciclo all'istante ed uscire da esso. Questa semplice variante viene usata in un numero ridotto di casi, che si possono ricondurre sostanzialmente a due: quando si lavora con la grafica e le librerie DirectX, per disegnare a schermo i costanti cambiamenti del mondo 2D o 3D; quando è necessario verificare le condizioni di uscita dal ciclo all'interno del suo blocco di codice. Ecco un esempio di questo secondo caso:
Module Module1 Sub Main() Dim a, b As Single Do 'Pulisce lo schermo Console.Clear() 'L'underscore serve per andare a capo nel codice Console.WriteLine("Inserire le misure di base e altezza " & _ "di un rettangolo:") a = Console.ReadLine b = Console.ReadLine 'Controlla che a e b non siano nulli. In quel caso, esce 'dal ciclo. Se non ci fosse questo If in mezzo al codice, 'verrebbe scritto a schermo il messaggio: ' "L'area del rettangolo è: 0" 'cosa che noi vogliamo evitare. Se si usasse un'altra 'variante di Do Loop, questo succederebbe sempre. Ecco 'perchè, in questa situazione, è meglio 'servirsi del semplice Do Loop If a = 0 Or b = 0 Then Exit Do End If Console.WriteLine("L'area del rettangolo è: " & (a * b)) Console.ReadKey() Loop End Sub End ModuleLe altre versioni del costrutto, invece, sono le seguenti:
Do 'istruzioni Loop While [condizione]
Esegue le istruzioni specificate fintanto che una condizione rimane valida, ma tutte le istruzioni vengono eseguite almeno una volta, poichè While si trova dopo Do. Esempio:Module Module1 Sub Main() Dim a As Int32 = 0 Do a += 1 Loop While (a < 2) And (a > 0) Console.WriteLine(a) Console.ReadKey() End Sub End Module
Il codice scriverà a schermo "2".Do While [condizione] 'istruzioni Loop
Esegue le istruzioni specificate fintanto che una condizione rimane valida, ma se la condizione non è valida all'inizio, non viene eseguita nessuna istruzione nel blocco. Esempio:Module Module1 Sub Main() Dim a As Int32 = 0 Do While (a < 2) And (a > 0) a += 1 Loop Console.WriteLine(a) Console.ReadKey() End Sub End Module
Il codice scriverà a schermo "0". Bisogna notare come le stesse condizioni del caso precedente, spostate da dopo Loop a dopo Do, cambino il risultato di tutto l'algoritmo. In questo caso, il codice nel ciclo non viene neppure eseguito perchè la condizione nel While diventa subito falsa (in quanto a = 0, e la proposizione "a < 0" risulta falsa). Nel caso precedente, invece, il blocco veniva eseguito almeno una volta poiché la condizione di controllo si trovava dopo di esso: in quel caso, a era ormai stato incrementato di 1 e perciò soddisfaceva la condizione affinché il ciclo continuasse (fino ad arrivare ad a = 2, che era il risultato visualizzato).Do 'istruzioni Loop Until [condizione]
Esegue le istruzioni specificate fino a che non viene verificata la condizione, ma tutte le istruzioni vengono eseguite almeno una volta, poichè Until si trova dopo Do. Esempio:Module Module1 Sub Main() Dim a As Int32 = 0 Do a += 1 Loop Until (a <> 1) Console.WriteLine(a) Console.ReadKey() End Sub End Module
A schermo apparirà "2".Do Until [condizione] 'istruzioni Loop
Esegue le istruzioni specificate fino a che non viene soddisfatta la condizione, ma se la condizione è valida all'inizio, non viene eseguita nessuna istruzione del blocco. Esempio:Module Module1 Sub Main() Dim a As Int32 = 0 Do Until (a <> 1) a += 1 Loop Console.WriteLine(a) Console.ReadKey() End Sub End Module
A schermo apparirà "0".
Module Module1 Sub Main() Dim a, b, c As Int32 Dim n As Int32 Console.WriteLine("-- Successione di Fibonacci --") Console.WriteLine("Inserire un numero oltre il quale terminare:") n = Console.ReadLine If n = 0 Then Console.WriteLine("Nessun numero della successione") Console.ReadKey() Exit Sub End If a = 1 b = 1 Console.WriteLine(a) Console.WriteLine(b) Do While c < n c = a + b b = a a = c Console.WriteLine(c) Loop Console.ReadKey() End Sub End Module
Suggerimento
Per impostare il valore di Default (ossia il valore predefinito) di una variabile si può usare questa sintassi:
Dim [nome] As [tipo] = [valore]Funziona solo per una variabile alla volta. Questo tipo di istruzione si chiama inizializzazione in-line.
A cura di: Il Totem