Strutture di controllo nidificate
Aggiornamento: novembre 2007
È possibile inserire istruzioni di controllo all'interno di altre istruzioni di controllo, ad esempio un blocco If...Then...Else all'interno di un ciclo For...Next. Un'istruzione di controllo inserita in un'altra istruzione di controllo è detta nidificata.
Livelli di nidificazione
In Visual Basic le strutture di controllo possono essere nidificate in un numero qualsiasi di livelli. È pratica diffusa far rientrare il corpo di ogni struttura nidificata per facilitarne la lettura. Questa operazione viene eseguita automaticamente dall'editor dell'ambiente di sviluppo integrato (IDE, Integrated Development Environment).
Nell'esempio che segue viene utilizzata la routine sumRows per sommare gli elementi positivi di ogni riga della matrice.
Public Sub sumRows(ByVal a(,) As Double, ByRef r() As Double)
Dim i, j As Integer
For i = 0 To UBound(a, 1)
r(i) = 0
For j = 0 To UBound(a, 2)
If a(i, j) > 0 Then
r(i) = r(i) + a(i, j)
End If
Next j
Next i
End Sub
Nell'esempio precedente la prima istruzione Next chiude il ciclo For interno mente l'ultima istruzione Next chiude il ciclo For esterno.
Analogamente, nelle istruzioni If nidificate le istruzioni End If vengono applicate automaticamente all'istruzione If immediatamente precedente. I cicli Do hanno un funzionamento analogo in base al quale l'istruzione Loop più interna corrisponde all'istruzione Do più interna.
Tipi diversi di nidificazione delle strutture di controllo
È possibile nidificare un tipo di struttura di controllo all'interno di un'altra. Nell'esempio che segue vengono utilizzati un blocco With all'interno di un ciclo For Each e i blocchi If nidificati all'interno del blocco With.
For Each ctl As System.Windows.Forms.Control In Me.Controls
With ctl
.BackColor = System.Drawing.Color.Yellow
.ForeColor = System.Drawing.Color.Black
If .CanFocus Then
.Text = "Colors changed"
If Not .Focus() Then
' Insert code to process failed focus.
End If
End If
End With
Next ctl
Strutture di controllo sovrapposte
Non è possibile sovrapporre le strutture di controllo. In altre parole, le strutture nidificate devono essere contenute completamente nella successiva struttura più interna. La seguente disposizione, ad esempio, non è valida in quanto il ciclo For termina prima del blocco With interno.
Nidificazione non valida di strutture For e With
Il compilatore di Visual Basic rileva le strutture di controllo sovrapposte e segnala un errore in fase di compilazione.
Vedere anche
Attività
Procedura: trasferire un controllo fuori da una struttura di controllo