|
Microsoft® Visual Basic® Scripting Edition Esecuzione di cicli nel codice |
Apprendimento di VBScript Indietro | Avanti |
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:
- Do...Loop: le istruzioni vengono ripetute fino a quando una condizione risulta True.
- While...Wend: le istruzioni vengono ripetute fino a quando una condizione risulta True.
- For...Next: le istruzioni vengono ripetute il numero di volte specificato da un contatore.
- For Each...Next: un gruppo di istruzioni viene ripetuto per ciascun elemento incluso nell'insieme di una matrice.
È 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 SubRipetizione 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 SubUscita 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
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.
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à.
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 DoMyProc50Times() Dim x For x = 1 To 50 MyProc Next End SubPer 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 TwosTotal() Dim j, total For j = 2 To 10 Step 2 total = total + j 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.Sub NewTotal() Dim myNum, total For myNum = 16 To 2 Step -2 total = total + myNum Next MsgBox "Il totale è " & total End Sub
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>