Storia della domanda
Le variabili locali in Visual Basic sono variabili dichiarate all'interno di un metodo, procedura, ciclo o blocco annidato. Il meccanismo della portata (scope) è migliorato da VB6 a VB.NET, con l'aggiunta di regole di shadowing e restrizioni nei blocchi annidati.
Problema
Un errore comune è dichiarare variabili con lo stesso nome nel blocco esterno e interno, portando a shadowing e risultati imprevisti. Un'inizializzazione errata di tali variabili può causare bug e ridurre la chiarezza del codice.
Soluzione
Dichiarare variabili nella portata minima necessaria. Evitare lo shadowing, utilizzare nomi unici nei blocchi annidati. Per le aree con lo stesso nome (ad esempio, "i" in due cicli) utilizzare nomi diversi o non sovrapporre i cicli.
Esempio di codice:
Sub Demo() Dim value As Integer = 10 If value > 5 Then Dim message As String = "Maggiore di cinque" Console.WriteLine(message) End If ' message non è accessibile qui, genererà un errore End Sub
Caratteristiche chiave:
Cosa succede se dichiaro una variabile all'interno di un ciclo con lo stesso nome di quella esterna?
La variabile annidata nasconde (shadows) quella esterna all'interno del blocco. Dopo la fine del blocco, l'istanza esterna diventa di nuovo attiva.
Dim x As Integer = 1 For i = 1 To 2 Dim x As Integer = i * 10 ' shadows x esterno Console.WriteLine(x) ' 10, poi 20 Next Console.WriteLine(x) ' 1
Come funziona la portata nel caso di procedure (Sub/Function) annidate in una classe?
La procedura annidata ha la propria portata e non "vede" le variabili esterne, a meno che non siano passate come parametri.
Posso usare nomi di variabili identici in procedure diverse?
Sì, è una prassi standard. Una variabile locale di un metodo non influisce su un'altra, anche se hanno lo stesso nome.
Dichiarazione di una variabile con lo stesso nome all'interno di due blocchi annidati, che ha portato a confusione e a risultati errati nei calcoli.
Vantaggi:
Svantaggi:
Utilizzo di nomi unici nei blocchi interni, chiarezza del commentato scope di ogni variabile, assenza di sovrapposizioni nei nomi.
Vantaggi:
Svantaggi: