Esercizio - Blocchi di codice e ambito delle variabili
- 11 minuti
Un blocco di codice è costituito da una o più istruzioni C# che definiscono un percorso di esecuzione. Le istruzioni all'esterno di un blocco di codice determinano quando, se e con quale frequenza il blocco di codice viene eseguito in fase di esecuzione. I limiti di un blocco di codice sono in genere definiti da parentesi graffe ondulate, {}.
Oltre al relativo effetto sul percorso di esecuzione, i blocchi di codice possono anche influire sull'ambito delle variabili. Gli esempi di codice esaminati durante questo esercizio consentono di comprendere la relazione tra i blocchi di codice e l'ambito delle variabili.
I blocchi di codice influiscono sull'ambito di una dichiarazione di variabile
L'ambito delle variabili fa riferimento alla visibilità di una variabile per l'altro codice nell'applicazione. Una variabile con ambito locale è accessibile solo all'interno del blocco di codice in cui è definita. Se si tenta di accedere alla variabile all'esterno del blocco di codice, si otterrà un errore del compilatore.
Nella parte restante di questa unità viene esaminata la relazione tra i blocchi di codice e l'ambito delle variabili.
Preparare l'ambiente di scrittura del codice
Questo modulo include attività pratiche che guidano l'utente attraverso il processo di compilazione ed esecuzione di un codice dimostrativo. È consigliabile completare queste attività usando Visual Studio Code come ambiente di sviluppo. L'uso di Visual Studio Code per queste attività consente di acquisire familiarità nella scrittura e nell'esecuzione del codice in un ambiente di sviluppo usato da professionisti di tutto il mondo.
Aprire Visual Studio Code.
Per aprire Visual Studio Code, è possibile usare il menu Start di Windows (o una risorsa equivalente per un altro sistema operativo).
In Visual Studio Code selezionare Apri cartella dal menu File.
Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows.
Se si dispone di un percorso di cartella in cui si conservano i progetti di codice, è possibile usare tale percorso. Per questo training, è importante che il percorso sia facile da individuare e da ricordare.
Nella finestra di dialogo Apri cartella, selezionare Seleziona cartella.
Se viene visualizzata una finestra di dialogo di sicurezza che chiede se si considerano attendibili gli autori, selezionare Sì.
Nel menu Terminale di Visual Studio Code, selezionare Nuovo terminale.
Si noti che un prompt dei comandi nel pannello Terminale visualizza il percorso della cartella corrente. Ad esempio:
C:\Users\someuser\Desktop>Nota
Se si usa il proprio PC anziché un ambiente sandbox o ospitato e sono stati completati altri moduli di Microsoft Learn in questa serie C#, potrebbe essere già stata creata una cartella di progetto per gli esempi di codice. In tal caso, è possibile ignorare il passaggio successivo, usato per creare un'app console nella cartella TestProject.
Al prompt dei comandi del terminale, per creare una nuova applicazione console in una cartella specificata, immettere il prompt seguente:
dotnet new console -o ./CsharpProjects/TestProjectQuesto comando dell'interfaccia della riga di comando .NET usa un modello di programma .NET per creare un nuovo progetto di applicazione console C# nel percorso della cartella specificato. Il comando crea le cartelle CsharpProjects e TestProject e usa TestProject come nome del file
.csproj.Se viene visualizzato un messaggio che indica che i file esistono già, continuare con i passaggi successivi. I file di progetto esistenti verranno riutilizzati.
Nella visualizzazione EXPLORER espandere la cartella CsharpProjects .
Verranno visualizzati la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.
In Visual Studio Code selezionare Apri cartella dal menu File.
Nella finestra di dialogo Apri cartella selezionare la cartella CsharpProjects e quindi selezionare Seleziona cartella.
Nella visualizzazione EXPLORER espandere la cartella TestProject e quindi selezionare Program.cs.
Eliminare le righe di codice esistenti.
Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.
Chiudere il pannello Terminale.
Creare una variabile all'interno di un blocco di codice
Per iniziare, verrà esaminato il caso di una variabile inizializzata all'interno di un blocco di codice.
Assicurarsi di avere aperto Visual Studio Code e che Program.cs sia visualizzato nel pannello Editor.
Nota
Program.cs deve essere vuoto. In caso contrario, selezionare ed eliminare tutte le righe di codice.
Digitare il codice seguente nel pannello Editor di Visual Studio Code:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }In Visual Studio Code scegliere Salva dal menu File.
Il file Program.cs deve essere salvato prima di compilare o eseguire il codice.
Nel pannello ESPLORA RISORSE per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject e quindi scegliere Apri nel terminale integrato.
Si aprirà un pannello Terminale. Il terminale deve includere un prompt dei comandi che mostra che il terminale è aperto sul percorso della cartella TestProject.
Nel prompt dei comandi del terminale, digitare dotnet run per eseguire il codice, quindi premere INVIO.
Nota
Se viene visualizzato un messaggio riportante: “Non è stato possibile trovare un progetto da eseguire”, assicurarsi che il prompt dei comandi del terminale visualizzi il percorso previsto della cartella TestProject. Ad esempio:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Verrà visualizzato l'output seguente:
Inside the code block: 10
Si tratta dell'output previsto. Ma cosa accade se vuoi accedere alla variabile value all'esterno del blocco di codice dell'istruzione if?
Tenta di accedere a una variabile all'esterno del blocco di codice in cui è dichiarata
Nell'editor di Visual Studio Code crea una nuova riga di codice sotto il blocco di codice dell'istruzione
if.Nella riga di codice vuota creata aggiungi la riga di codice seguente:
Console.WriteLine($"Outside the code block: {value}");Verifica che il codice aggiornato sia simile al seguente:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.
Immettere
dotnet rundal prompt dei comandi del terminale per eseguire il codice.Nota che, quando tenti di eseguire l'applicazione, si verifica un errore di compilazione:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
La parte Program.cs(7,46) del messaggio indica che l'errore è associato alla riga 7 nel file Program.cs colonna 46.
Questo errore viene generato perché una variabile dichiarata all'interno di un blocco di codice è accessibile solo (può essere vista solo) all'interno di tale blocco di codice. Poiché non è possibile accedere a una variabile all'esterno del blocco di codice in cui è dichiarata, value non può accedere dalla riga 7 del codice.
Una variabile dichiarata in un blocco di codice del metodo viene definita variabile locale. Puoi vedere il termine variabile locale usato durante la revisione di articoli che illustrano l'ambito delle variabili.
Sposta la dichiarazione di variabile sopra il blocco di codice
Per accedere a una variabile sia all'interno che all'esterno di un blocco di codice, devi dichiarare la variabile prima (sopra) del blocco di codice in modo che il codice esterno al blocco di codice possa "vedere" la variabile.
Aggiornare il codice nell'editor di Visual Studio Code come illustrato di seguito:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Dedicare un attimo di tempo a esaminare gli aggiornamenti.
Nota che
valueè ora dichiarata (ma non ne è stata inizializzata) all'esterno del blocco di codiceif.Usa Visual Studio Code per salvare gli aggiornamenti e quindi esegui il codice.
Si noti che viene comunque visualizzato un errore di compilazione.
Questa volta, quando si tenta di eseguire l'applicazione, viene segnalato l'errore di compilazione seguente:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'L'errore è associato alla riga 6 all'interno del blocco di codice perché
valuenon è stato inizializzato (non gli è stato assegnato un valore). Se la riga di codicevalue = 10;si fosse trovata sopra il blocco di codice dell'istruzioneif, l'applicazione sarebbe stata compilata correttamente e tutto sarebbe stato corretto. Tuttavia, poichévaluenon è stato inizializzato, non è possibile accedervi all'interno del blocco di codice.Assicurarsi che le variabili vengano inizializzate prima di tentare di accedervi risolverà questo problema.
Inizializza una variabile come parte della dichiarazione di variabile
Per inizializzare
valuecome parte della dichiarazione di variabile, aggiorna il codice nel modo seguente:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Questo codice risolve l'errore di compilazione "variabile locale non assegnata" inizializzando
valuecome parte della dichiarazione di variabile.Usare Visual Studio Code per salvare ed eseguire il codice.
A questo punto, quando esegui l'applicazione, dovresti vedere l'output seguente:
Inside the code block: 0 Outside the code block: 10
Esamina l'interpretazione del compilatore del codice
Per evitare errori di runtime, il compilatore C# analizza il codice nell'editor di Visual Studio Code e durante il processo di compilazione. Tuttavia, il compilatore potrebbe non sempre interpretare il codice nel tuo stesso modo.
Considera i due esempi di codice seguenti che sembrano servire allo stesso scopo:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
Potresti pensare che questi due esempi producano sempre lo stesso risultato, ma il compilatore C# interpreta questi due esempi di codice in modo diverso.
Per il primo esempio di codice, il compilatore interpreta flag come variabile booleana a cui è possibile assegnare un valore di true o false. Il compilatore conclude che se flag è false, value non verrà inizializzato quando viene eseguito il secondo Console.WriteLine(). Essenzialmente il compilatore considera possibili i due percorsi di esecuzione del codice seguenti:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
E
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Poiché il compilatore considera il secondo percorso una possibilità (per l'esempio di codice 1), genera un messaggio di errore durante il processo di compilazione. Inoltre, l'editor di codice in Visual Studio Code avvisa l'utente di questo problema visualizzando una riga ondulata rossa sotto value (sotto il blocco di codice).
Per il secondo esempio di codice, il compilatore conclude che il contenuto del blocco di codice dell'istruzione if verrà sempre eseguito (true è sempre true). Il compilatore non genera un errore di compilazione perché interpreta il secondo esempio di codice per avere un singolo percorso di esecuzione come indicato di seguito:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Riepilogo
Ecco alcuni aspetti importanti da ricordare sui blocchi di codice:
- Quando dichiari una variabile all'interno di un blocco di codice, la visibilità è locale a tale blocco di codice e tale variabile non può essere accessibile all'esterno del blocco di codice.
- Per assicurarti che una variabile sia visibile sia all'interno che all'esterno di un blocco di codice, devi dichiarare la variabile prima del blocco di codice (all'esterno e al di sopra del blocco di codice).
- Assicurati che le variabili vengano inizializzate prima che il codice tenti di accedervi (per tutti i potenziali percorsi di esecuzione del codice).