Esercizio - Creare e configurare cicli di iterazione

Completato

In apparenza l'istruzione for è un'altra istruzione di iterazione che consente di eseguire l'iterazione di un blocco di codice e quindi di modificare il flusso di esecuzione del codice. Tuttavia, dopo aver esaminato il funzionamento di ognuna, è possibile identificare meglio le caratteristiche di ogni istruzione di iterazione e stabilire quando usarle.

Che cos'è l'istruzione for?

L'istruzione for esegue l'iterazione di un blocco di codice per un numero specifico di volte. Questo livello di controllo rende univoca l'istruzione for tra le altre istruzioni di iterazione. L'istruzione foreach esegue l'iterazione di un blocco di codice una volta per ogni elemento di una sequenza di dati, ad esempio una matrice o una raccolta. L'istruzione while esegue l'iterazione di un blocco di codice fino a quando non viene soddisfatta una condizione.

L'istruzione for offre anche un maggior controllo sul processo di iterazione esponendo le condizioni per l'iterazione.

In questo esercizio si userà l'istruzione for, imparando a controllare la precondizione dell'iterazione, la condizione di completamento, il modello di iterazione e altro ancora. Verranno anche illustrati i casi d'uso comuni per l'istruzione for.

Ora è possibile preparare l'ambiente per la scrittura di codice e iniziare l'analisi degli esempi di codice che implementano un'istruzione for.

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.

  1. 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).

  2. In Visual Studio Code selezionare Apri cartella dal menu File.

  3. Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows.

    Se si dispone di un percorso di cartella diverso in cui si conservano i progetti di codice, è possibile usare tale percorso. Per questo training, l'aspetto importante è avere una posizione facile da individuare e ricordare.

  4. 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 .

  5. 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.

  6. Al prompt dei comandi del terminale per creare una nuova applicazione console in una cartella specificata digitare dotnet new console -o ./CsharpProjects/TestProjects e quindi premere INVIO.

    Questo 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 automaticamente le cartelle CsharpProjects e TestProject e usa TestProject come nome del file .csproj.

  7. Nel pannello ESPLORA RISORSE espandere la cartella CsharpProjects.

    Verrà visualizzata la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.

  8. Nel pannello ESPLORA RISORSE, per visualizzare il file di codice nel pannello Editor selezionare Program.cs.

  9. Eliminare le righe di codice esistenti.

    Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.

  10. Chiudere il pannello Terminale.

Scrivere un'istruzione for di base

  1. 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.

  2. Digitare il codice seguente nel pannello Editor di Visual Studio Code.

    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(i);
    }
    

    Questo codice presenta un'istruzione semplice for che scorre il blocco di codice 10 volte, stampando il valore corrente di i.

  3. Nel menu File di Visual Studio Code, selezionare Salva.

    Il file Program.cs deve essere salvato prima di compilare o eseguire il codice.

  4. 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.

  5. 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>

    Viene visualizzato l'output seguente.

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
  6. Prendere un minuto per identificare le sei parti dell'istruzione for.

    L'istruzione for include le sei parti seguenti:

    1. La parola chiave for.
    2. Set di parentesi che definisce le condizioni di iterazione for. Le parentesi contengono tre parti distinte, separate dall'operatore di fine istruzione, da un punto e virgola.
    3. La prima parte definisce e inizializza la variabile dell'iteratore. In questo esempio: int i = 0. Questa sezione viene definita inizializzatore.
    4. La seconda parte definisce la condizione di completamento. In questo esempio: i < 10. In altre parole, il runtime continuerà a eseguire l'iterazione del codice nel blocco di codice sotto l'istruzione for mentre i è minore di 10. Quando i diventa uguale a 10, il runtime interrompe l'esecuzione del blocco di codice dell'istruzione for. La documentazione indica questa sezione come condizione.
    5. La terza parte definisce l'azione da eseguire dopo ogni iterazione. In questo caso, dopo ogni iterazione, i++ incrementerà di 1 il valore di i. La documentazione indica questa sezione come iteratore.
    6. Infine il blocco di codice. Il blocco di codice contiene il codice che verrà eseguito per ogni iterazione. Si noti che all'interno del blocco di codice viene fatto riferimento al valore di i. La documentazione indica questa sezione come corpo.

    Considerate le regole per la denominazione delle variabili, ci si potrebbe chiedere se i sia un nome valido per la variabile che contiene l'iterazione corrente. In questo caso, i viene considerato valido. Altre scelte comuni sono x e counter. Il nome j viene usato anche in tali situazioni quando si dispone di un'istruzione for esterna che usa ie deve creare una variabile di iterazione per un'istruzione for interna.

    Nota

    Tutte e tre le sezioni (inizializzatore, condizione ed iteratore) sono facoltative, ma di fatto vengono in genere usate tutte e tre.

Modificare le condizioni di iterazione

Come affermato in precedenza, l'istruzione for ha due qualità univoche tra le istruzioni di iterazione.

  • L'istruzione for deve essere usata quando si conosce in anticipo il numero di volte in cui è necessario eseguire l'iterazione di un blocco di codice.
  • L'istruzione for consente di controllare il modo in cui viene gestita ogni iterazione.

Come procedere se è necessario eseguire l'iterazione di un blocco di codice, ma si vuole eseguire il conto alla rovescia invece che normalmente?

  1. Usare l'editor di Visual Studio Code per aggiornare il codice come indicato di seguito:

    for (int i = 10; i >= 0; i--)
    {
        Console.WriteLine(i);
    }
    
  2. Esaminare il codice aggiornato.

    Modificando le tre parti dell'istruzione for, ne viene modificato il comportamento.

    • La variabile di iterazione viene impostata su 10.
    • Si modifica la condizione di completamento per uscire dall'istruzione for quando i è minore di 0.
    • Si modifica il modello dell'iteratore per sottrarre 1 da i ogni volta che viene completata un'iterazione.
  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.

    Immettere dotnet run dal prompt dei comandi del terminale per eseguire il codice.

  4. Si noti che l'output è stato modificato.

    Quando si esegue il codice, verrà visualizzato l'output seguente.

    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    

Sperimentare il modello dell'iteratore

Come procedere se si vogliono ignorare alcuni valori nella variabile dell'iteratore?

  1. Usare l'editor di Visual Studio Code per aggiornare il codice come indicato di seguito:

    for (int i = 0; i < 10; i += 3)
    {
        Console.WriteLine(i);
    }
    
  2. Esaminare il codice aggiornato.

    Invece di incrementare o diminuire di 1 il valore della variabile dell'iteratore, viene usato i += 3 per ignorare due valori dopo ogni iterazione.

  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.

    Immettere dotnet run dal prompt dei comandi del terminale per eseguire il codice.

  4. Si noti che l'output è stato modificato.

    Quando si esegue il codice, verrà visualizzato l'output seguente.

    0
    3
    6
    9
    

    Certo, non si farà questo tipo di cose spesso, ma è comunque importante avere un livello di controllo granulare sulle iterazioni dovrebbe mai essere necessario.

Usare la parola chiave break per interrompere l'istruzione di iterazione

Come procedere se è necessario uscire in anticipo dall'istruzione di iterazione in base a una condizione? È possibile usare la parola chiave break.

  1. Usare l'editor di Visual Studio Code per aggiornare il codice come indicato di seguito:

    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(i);
        if (i == 7) break;
    }
    
  2. Esaminare l'uso della parola chiave break nel codice aggiornato.

    La parola chiave break è stata presentata nel modulo "Diramare il flusso di codice usando il costrutto switch-case in C#". Come è evidente, è possibile usare la parola chiave break per uscire anche dalle istruzioni di iterazione.

  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.

    Immettere dotnet run dal prompt dei comandi del terminale per eseguire il codice.

  4. Si noti che l'output è stato modificato.

    Quando si esegue il codice, verrà visualizzato l'output seguente.

    0
    1
    2
    3
    4
    5
    6
    7
    

Scorrere ogni elemento di una matrice

Un utilizzo comune per l'istruzione for consiste nell'eseguire l'iterazione di una matrice di elementi, soprattutto se è necessario avere un certo controllo sul modo in cui si verifica l'iterazione. Mentre foreach esegue l'iterazione di ogni elemento della matrice, l'istruzione for può essere modificata e personalizzata in base alle esigenze.

  1. Usare l'editor di Visual Studio Code per aggiornare il codice come indicato di seguito:

    string[] names = { "Alex", "Eddie", "David", "Michael" };
    for (int i = names.Length - 1; i >= 0; i--)
    {
        Console.WriteLine(names[i]);
    }
    
  2. Esaminare il codice aggiornato.

    Prima di tutto, si noti che è stata creata un'istanza di una matrice di stringhe denominata names che contiene quattro nomi.

    Si noti quindi che si usa la proprietà Array.Length per ottenere il numero di elementi nella matrice e che si sta usando questo valore per inizializzare la variabile iteratore (int i = names.Length - 1). Viene sottratto 1 dal valore perché il numero di indice per gli elementi della matrice è in base zero (i numeri di indice dei quattro elementi sono 0-3).

    Infine, si noti che è stata scelta l'iterazione della matrice all'indietro. Si noti che non è possibile eseguire l'istruzione foreach. Viene usato il valore della variabile di iterazione all'interno del blocco di codice per specificare il numero di indice degli elementi della matrice (names[i]).

  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.

    Immettere dotnet run dal prompt dei comandi del terminale per eseguire il codice.

  4. Si noti che gli elementi della matrice sono elencati in ordine inverso (come previsto).

    Quando si esegue il codice, verrà visualizzato l'output seguente.

    Michael
    David
    Eddie
    Alex
    

    Nota

    È possibile eseguire l'iterazione degli elementi della matrice creando l'istruzione for come segue: for (int i = 0; i < names.Length; i++).

Esaminare la limitazione dell'istruzione foreach

Come procedere se si vuole aggiornare un valore nella matrice durante un'iterazione foreach?

  1. Usare l'editor di Visual Studio Code per aggiornare il codice come indicato di seguito:

    string[] names = { "Alex", "Eddie", "David", "Michael" };
    foreach (var name in names)
    {
        // Can't do this:
        if (name == "David") name = "Sammy";
    }
    
  2. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.

    Immettere dotnet run dal prompt dei comandi del terminale per eseguire il codice.

  3. Si noti il messaggio di errore visualizzato.

    Se si tenta di compilare ed eseguire il codice, verrà visualizzata un'eccezione.

    Cannot assign to name because it is a 'foreach iteration variable'
    

    In altre parole, non è possibile riassegnare il valore di name perché fa parte dell'implementazione interna dell'iterazione foreach.

Superamento della limitazione dell'istruzione foreach tramite l'istruzione for

Provare a usare un'istruzione for per modificare il contenuto di una matrice all'interno del blocco di codice di iterazione.

  1. Usare l'editor di Visual Studio Code per aggiornare il codice come indicato di seguito:

    string[] names = { "Alex", "Eddie", "David", "Michael" };
    for (int i = 0; i < names.Length; i++)
        if (names[i] == "David") names[i] = "Sammy";
    
    foreach (var name in names) Console.WriteLine(name); 
    
  2. Esaminare il codice aggiornato.

    Si noti che sono state rimosse le parentesi graffe dai blocchi di codice che contengono solo una singola riga di codice. Questa revisione usa la stessa tecnica illustrata nel modulo "Controllare l'ambito e la logica delle variabili usando blocchi di codice in C#". Molti sviluppatori trovano questo stile difficile da leggere, mentre altri preferiscono questo stile abbreviato perché li aiuta a scrivere in modo più conciso ed espressivo. Se si trova difficile leggere questo codice o se non si preferisce questo stile, assicurarsi che le parentesi graffe possano essere sempre usate nei blocchi di codice. Se si vuole, aggiornare il codice nel pannello Editor con il codice seguente:

    string[] names = { "Alex", "Eddie", "David", "Michael" };
    
    for (int i = 0; i < names.Length; i++)
    {
        if (names[i] == "David")
        {
            names[i] = "Sammy";
        }
    }
    
    foreach (var name in names)
    {
        Console.WriteLine(name);
    }
    
  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.

    Immettere dotnet run dal prompt dei comandi del terminale per eseguire il codice.

  4. Si noti che il codice viene eseguito senza errori e genera l'output desiderato.

    Quando si esegue il codice, verrà visualizzato l'output seguente.

    Alex
    Eddie
    Sammy
    Michael
    

    Poiché la matrice non è direttamente inclusa nell'implementazione dell'istruzione di iterazione, è possibile modificare i valori all'interno della matrice.

Riepilogo

Ecco alcune lezioni apprese da questa unità:

  • L'istruzione di iterazione for consente di eseguire l'iterazione di un blocco di codice per un numero specifico di volte.
  • L'istruzione di iterazione for consente di controllare ogni aspetto della meccanica di iterazione modificando le tre condizioni all'interno delle parentesi: l'inizializzatore, la condizione e l'iteratore.
  • Quando è necessario controllare come deve essere eseguita l'iterazione di ogni elemento in una matrice, si usa comunemente l'istruzione for.
  • Se il blocco di codice contiene solo una riga di codice, è possibile eliminare le parentesi graffe e lo spazio vuoto, se lo si desidera.

Verifica delle conoscenze

1.

Quale delle istruzioni for seguenti è corretta?

2.

Quale delle istruzioni seguenti deve essere usata per uscire da un for ciclo prima del completamento dell'iterazione?