Il Comando goto e le etichette in C#: guida completa

Il comando goto è uno degli elementi più discussi nei linguaggi di programmazione, incluso C#. È considerato da molti sviluppatori come una caratteristica da evitare, ma in alcune situazioni specifiche può risultare utile. In questa guida esploreremo cos’è il comando goto, come usarlo, i rischi associati, e quando è meglio evitarlo.

Cos’è il comando goto?

Il comando goto in C# consente di saltare l’esecuzione del codice da una parte all’altra all’interno dello stesso metodo. Si utilizza insieme a un’etichetta (label) che rappresenta il punto nel codice in cui si vuole “saltare”. Questo meccanismo è molto simile a quello utilizzato nei linguaggi di programmazione più vecchi, come il BASIC o il Fortran.

Un esempio semplice del comando goto è il seguente:

public void EsempioGoto()
{
    int x = 0;

inizio:
    Console.WriteLine($"Valore di x: {x}");
    x++;
    if (x < 3)
    {
        // Torna all'etichetta "inizio" 
        goto inizio;
    }
}

In questo esempio, ogni volta che il valore di x è inferiore a 3, il programma eseguirà il salto all'etichetta inizio e continuerà l'esecuzione da quel punto.

Esempi di utilizzo del goto

Il comando goto può essere utilizzato in diversi contesti, anche se è generalmente sconsigliato per la maggior parte delle situazioni. Vediamo un paio di esempi:

Uscita da loop multipli: Se hai più cicli annidati e desideri interromperli tutti contemporaneamente, puoi utilizzare il comando goto per evitare un uso complicato di istruzioni break.

public void UscitaDaLoopMultipli()
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (i == 3 && j == 2) ù
            {
                // Salta fuori dai loop
                goto fuoriDaiCicli;
            }
        }
    }
    
fuoriDaiCicli:
    Console.WriteLine("Usciti dai cicli");
}

Error Handling semplificato: Anche se oggi si preferiscono le eccezioni per gestire gli errori, in alcuni vecchi approcci il comando goto veniva usato per "saltare" in sezioni di gestione degli errori.

public void GestioneErrori()
{
    int x = 10, y = 0;
    if (y == 0)
    {
        goto errore;
    }

    Console.WriteLine(x / y);
    return;

errore:
    Console.WriteLine("Errore: divisione per zero!");
}

Questa tipologia di codice è obsoleta e sconsigliata, piuttosto utilizza il blocco try-catch

public void GestioneErroriConTryCatch()
{
    try
    {
        int x = 10, y = 0;
        Console.WriteLine(x / y);
    }
    catch (DivideByZeroException ex)
    {
        Console.WriteLine("Errore: divisione per zero!");
    }
}

Limitazioni e rischi del goto

Nonostante possa sembrare comodo in alcuni casi, l'uso del goto presenta diversi rischi e limitazioni:

  1. Codice difficile da leggere: Saltare arbitrariamente da una parte all'altra del codice rende molto più complicata la comprensione del flusso logico. Un codice scritto con goto può risultare poco intuitivo e più difficile da mantenere.
  2. Debug complesso: La difficoltà nel seguire il flusso di esecuzione può complicare il processo di debugging e l'identificazione dei bug.
  3. Disponibilità limitata: Il comando goto può essere utilizzato solo all'interno dello stesso metodo e non può "saltare" da un metodo all'altro o attraverso blocchi try-catch.

Best practices

Sebbene goto esista in C#, molti sviluppatori preferiscono evitarlo. Ecco alcune best practices per scrivere codice più pulito e manutenibile:

  1. Preferire break e continue: In caso di cicli, utilizza i comandi break o continue per controllare il flusso di esecuzione, che sono più chiari e leggibili rispetto a goto.
  2. Utilizzare metodi e funzioni: Se un determinato flusso di codice diventa complicato, considera la possibilità di suddividerlo in più metodi. Questo approccio aiuta a rendere il codice più modulare e comprensibile.
  3. Gestire gli errori con eccezioni: Al posto del goto per gestire gli errori, utilizza le strutture di try-catch. Questo è il metodo consigliato per gestire gli errori in C#.
  4. Evitare goto per flussi complessi: In generale, se ti trovi a utilizzare il comando goto in situazioni complicate, è meglio cercare una soluzione alternativa. Potresti dover ripensare l'architettura del codice.

Conclusione

Il comando goto in C# è uno strumento che esiste, ma che andrebbe utilizzato con molta cautela. Anche se può sembrare utile in situazioni specifiche, come l'uscita da loop annidati, il suo utilizzo può rendere il codice meno leggibile e più difficile da mantenere. Nella maggior parte dei casi, ci sono alternative più eleganti e sicure, come l'uso di metodi, strutture di controllo break e continue, o la gestione delle eccezioni tramite try-catch.

Per chi è agli inizi, la raccomandazione è di evitare goto e concentrarsi su pratiche di programmazione che promuovano codice pulito e facile da leggere.

Corsi correlati

In Arrivo

Design Pattern per videogiochi

I Design Pattern sono soluzioni a problemi comuni che si incontrano nello sviluppo del software. Nel contesto dei videogiochi, questi pattern possono aiutare a gestire la complessità crescente dei giochi moderni. Sei appassionato di videogiochi? Hai mai pensato a come vengono progettati e sviluppati? Sei curioso di scoprire i segreti dietro la creazione dei tuoi giochi preferiti? Allora sei nel posto giusto! Questo corso è stato progettato per fornirti una solida comprensione dei Design Pattern, strumenti fondamentali per ogni sviluppatore di giochi. Attraverso esempi pratici e realistici, esploreremo insieme come questi pattern possono aiutarti a creare giochi più efficienti, flessibili e mantenibili.

In Arrivo

Corso Fondamenti di Python

Python, uno dei linguaggi di programmazione più popolari al mondo, è ampiamente utilizzato da colossi dell’informatica e della tecnologia come Google, la Nasa e Mozilla.
Questo corso sui fondamenti di Python esplorerà le ragioni del suo successo duraturo. Impareremo la potente ed espressiva sintassi di Python, che consente di ottenere risultati impressionanti con poche righe di codice.

In Arrivo

Blender Masterclass 2

I paesaggi, in generale, possono risultare intimidatori data la loro complessità, costituita da numerosi elementi che sembrano formare qualcosa di virtualmente infinito. Durante le lezioni di questo corso, ci concentreremo su una scomposizione delle diverse fasi coinvolte nella creazione di una scena, affrontandole una alla volta attraverso passi graduati.

In Arrivo

Blender Masterclass 1

In questo corso di Blender 3D, Masha, in collaborazione con Gedemy, vi mostrerà il processo di modellazione, UV mapping, shading, e texture painting di un asset. Una volta apprese le basi, vedremo anche come effettuare il baking delle textures e la preparazione con successivo export della mesh in modo che possa essere utilizzabile all’interno di un qualsiasi altro software.

Crea il tuo account gratuito Gedemy

Gedemy è la piattaforma di formazione che ti permette di sviluppare competenze verticali corsi in un unico piano realizzati da esperti in ambiti come Marketing, Business, Design, Tech, AI e molto altro.

Login

Oppure

Non sei ancora registrato?