Microsoft® Visual Basic® Scripting Edition
Esecuzione di cicli nel codice
 Apprendimento di VBScript 
 Indietro | Avanti 


Utilizzo di cicli per la ripetizione del codice
L'esecuzione di cicli consente di eseguire ripetutamente un gruppo di istruzioni. In alcuni cicli le istruzioni vengono ripetute fino a quando una condizione risulta False, mentre in altri vengono ripetute fino a quando una condizione risulta True. Esistono inoltre cicli in cui le istruzioni vengono ripetute un numero specifico di volte.

In VBScript sono disponibili le seguenti istruzioni per l'esecuzione di cicli:

Cicli Do
È possibile utilizzare le istruzioni Do...Loop per eseguire un blocco di istruzioni un numero indefinito di volte. Le istruzioni vengono ripetute mentre una condizione è True oppure fino a quando risulta True.
Ripetizione di istruzioni mentre una condizione è True
Per verificare una condizione in un'istruzione Do...Loop, è necessario utilizzare la parola chiave While. La verifica può essere eseguita prima dell'inizio del ciclo, come illustrato nell'esempio ChkFirstWhile riportato di seguito, oppure dopo almeno una esecuzione del ciclo, come illustrato nell'esempio ChkLastWhile. Nella routine ChkFirstWhile, se myNum è impostato su 9 anziché su 20, le istruzioni incluse nel ciclo non verranno mai eseguite. Nella routine ChkLastWhile, le istruzioni incluse nel ciclo vengono eseguite una sola volta, in quanto la condizione è già False.
 Sub ChkFirstWhile()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do While myNum > 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."
 End Sub

 Sub ChkLastWhile()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do
         myNum = myNum - 1
         counter = counter + 1
     Loop While myNum > 10
     MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."
 End Sub
Ripetizione di un'istruzione fino a quando una condizione risulta True
Per verificare una condizione in un'istruzione Do...Loop, è possibile utilizzare la parola chiave Until in due modi diversi, ovvero la verifica può essere eseguita prima dell'inizio del ciclo, come illustrato nell'esempio ChkFirstWhile riportato di seguito, oppure dopo almeno una esecuzione del ciclo, come illustrato nell'esempio ChkLastWhile. Il ciclo viene ripetuto finché la condizione risulta False.
 Sub ChkFirstUntil()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."
 End Sub

 Sub ChkLastUntil()
     Dim counter, myNum
     counter = 0
     myNum = 1
     Do
         myNum = myNum + 1
         counter = counter + 1
     Loop Until myNum = 10
     MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."
 End Sub
Uscita da un'istruzione Do...Loop
Per uscire da una struttura Do...Loop, è possibile utilizzare l'istruzione Exit Do. Dato che l'uscita da tale struttura viene in genere eseguita solo in determinate situazioni, ad esempio per evitare la ripetizione infinita di un ciclo, l'istruzione Exit Do deve essere inclusa nel blocco di istruzioni True di un'istruzione If...Then...Else. Se la condizione è False, il ciclo viene eseguito normalmente.

Nell'esempio riportato di seguito, a myNum viene assegnato un valore in base al quale viene creato un ciclo infinito. L'istruzione If...Then...Else consente di verificare questa condizione, impedendo pertanto un'esecuzione all'infinito.

 Sub ExitExample()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
     Loop
     MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."
 End Sub
Istruzione While...Wend
L'istruzione While...Wend deve essere utilizzata da utenti che ne conoscono la corretta applicazione. Dato che si tratta di un'istruzione poco flessibile, è consigliabile utilizzare invece l'istruzione Do...Loop.
Istruzione For...Next
L'istruzione For...Next consente di eseguire un blocco di istruzioni un numero specifico di volte. Nel caso di cicli, è necessario utilizzare una variabile contatore il cui valore viene aumentato o diminuito a ogni ripetizione del ciclo.

Nella routine riportata di seguito, ad esempio, la routine MyProc viene eseguita 50 volte. L'istruzione For specifica la variabile contatore x e il corrispondente valore iniziale e finale. L'istruzione Next consente di aumentare la variabile contatore con incrementi di una unità.

 Sub DoMyProc50Times()
     Dim x
     For x = 1 To 50
         MyProc
     Next
 End Sub
La parola chiave Step consente di aumentare o diminuire la variabile contatore del valore specificato. Nell'esempio riportato di seguito la variabile contatore viene incrementata di due unità a ogni ripetizione del ciclo. Al completamento del ciclo, il totale corrisponde alla somma di 2, 4, 6, 8 e 10.
 Sub TwosTotal()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "Il totale è " & total
 End Sub
Per diminuire la variabile contatore, è necessario utilizzare un valore Step negativo specificando un valore finale minore del valore iniziale. Nell'esempio riportato di seguito, la variabile contatore myNum viene diminuita di due unità a ogni ripetizione del ciclo. Al completamento del ciclo, il totale corrisponde alla somma di 16, 14, 12, 10, 8, 6, 4 e 2.

 Sub NewTotal()
     Dim myNum, total
     For myNum = 16 To 2 Step -2
         total = total + myNum
     Next
     MsgBox "Il totale è " & total
 End Sub
Per uscire da un'istruzione For...Next prima che il valore del contatore abbia raggiunto il valore finale, è necessario utilizzare l'istruzione Exit For. Dato che l'uscita da un'istruzione For...Next viene in genere eseguita solo in determinate situazioni, ad esempio quando si verifica un errore, l'istruzione Exit For deve essere inclusa nel blocco di istruzioni True di un'istruzione If...Then...Else. Se la condizione è False, il ciclo viene eseguito normalmente.

Istruzione For Each...Next
L'istruzione For Each...Next è simile a For...Next, con la sola differenza che le istruzioni non vengono ripetute il numero di volte specificato, ma per ciascun elemento di un insieme di oggetti o per ciascun elemento di una matrice. Ciò risulta particolarmente utile quando non si conosce il numero di elementi di un insieme.

Nell'esempio di codice HTML riportato di seguito, il contenuto di un oggetto Dictionary viene utilizzato per inserire testo in varie caselle di testo.

 <HTML>
 <HEAD><TITLE>Forms and Elements</TITLE></HEAD>
 <SCRIPT LANGUAGE="VBScript">
 <!--
 Sub cmdChange_OnClick
    Dim d                   'Crea una variabile 
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "0", "Atene"     'Aggiunge alcune chiavi ed elementi 
    d.Add "1", "Belgrado"
    d.Add "2", "Cairo"

    For Each I in d
        Document.frmForm.Elements(I).Value = D.Item(I)
    Next
 End Sub
 -->
 </SCRIPT>
 <BODY>
 <CENTER>
 <FORM NAME="frmForm"

 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Button" NAME="cmdChange" VALUE="Fare clic qui"><p>
 </FORM>
 </CENTER>
 </BODY>
 </HTML>