0Pricing
C# Academy · Lezione

Pattern di guardia e convalida

Convalidate subito gli input con clausole di guardia, sollevate le eccezioni corrette e usate controlli in stile TryParse per i dati degli utenti.

Pattern di guardia e convalida è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Perché usare le guardie

Obiettivo: mantenga i metodi sicuri e leggibili.

  • Utilizzi le clausole di guardia all'inizio
  • Generi eccezioni specifiche (ArgumentNullException, ArgumentOutOfRangeException)
  • Utilizzi TryParse per l'input dell'utente
  • Rilevi rapidamente gli errori; eviti annidamenti profondi

Dimostrazione delle guardie iniziali

Aggiunga piccoli controlli all'inizio per convalidare gli argomenti; generi eccezioni specifiche, così i chiamanti possono sapere che cosa è andato storto.

using System;

// Demo: validate inputs at the top; keep main logic flat.
public class Program
{
  // Compute price with simple rules; guard early.
  public static decimal ComputePrice(string sku, int qty, decimal unitPrice)
  {
    if (sku == null) throw new ArgumentNullException("sku");
    if (sku.Length == 0) throw new ArgumentException("sku must not be empty", "sku");
    if (qty <= 0) throw new ArgumentOutOfRangeException("qty", "qty must be > 0");
    if (unitPrice < 0m) throw new ArgumentOutOfRangeException("unitPrice", "unitPrice must be >= 0");

    // Main logic stays simple
    decimal subtotal = qty * unitPrice;
    if (qty >= 10) subtotal = subtotal * 0.9m; // small bulk discount
    return subtotal;
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ComputePrice("ABC", 2, 5m));   // ok
    try { Console.WriteLine(ComputePrice("", 2, 5m)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
  }
}

Classe helper Guard

Estragga i controlli comuni in una piccola classe Guard per mantenere i corpi dei metodi ordinati e coerenti.

using System;

// Minimal static helper for common validations (beginner friendly).
public static class Guard
{
  public static void NotNull(object value, string name)
  {
    if (value == null) throw new ArgumentNullException(name);
  }

  public static void NotNullOrEmpty(string value, string name)
  {
    if (value == null) throw new ArgumentNullException(name);
    if (value.Length == 0) throw new ArgumentException(name + " must not be empty", name);
  }

  public static void InRange(int value, int minInclusive, int maxInclusive, string name)
  {
    if (value < minInclusive || value > maxInclusive)
      throw new ArgumentOutOfRangeException(name, "Expected " + minInclusive + ".." + maxInclusive);
  }
}

public class Program
{
  static int ScoreFor(string userId, int level)
  {
    Guard.NotNullOrEmpty(userId, "userId");
    Guard.InRange(level, 1, 10, "level");
    // pretend logic
    return level * 100;
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ScoreFor("u42", 3));
    try { Console.WriteLine(ScoreFor(null, 3)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
  }
}

Convalida con TryParse

Per gli input non validi ordinari, preferisca metodi nello stile di TryParse che restituiscono false invece di generare eccezioni.

using System;

// Use TryParse for user-provided text; avoid throwing for normal invalid input.
public class Program
{
  public static bool TryGetPort(string text, out int port)
  {
    port = 0;
    int value;
    if (!int.TryParse(text, out value)) return false;
    if (value < 1 || value > 65535) return false;
    port = value;
    return true;
  }

  public static void Main(string[] args)
  {
    int p;
    Console.WriteLine("8080 -> " + (TryGetPort("8080", out p) ? ("ok " + p) : "invalid"));
    Console.WriteLine("abc -> " + (TryGetPort("abc", out p) ? ("ok " + p) : "invalid"));
  }
}

Generare un'eccezione o restituire un valore

  • Generi un'eccezione per gli errori del programmatore (uso errato dell'API, valore null non consentito, valore fuori intervallo)
  • Restituisca false/Result per gli errori ordinari dell'utente (testo non valido)
  • Utilizzi tipi di eccezione specifici; includa il nome del parametro
  • Convalidi dall'esterno verso l'interno: esegua prima i controlli meno costosi

Buone pratiche

Suggerimenti:

  • Convalidi ai confini (controller, API pubbliche)
  • Preferisca piccoli metodi di guardia agli annidamenti profondi
  • Mantenga brevi e chiari i messaggi di errore
  • Registri il messaggio una sola volta al confine, non in ogni guardia

Significato della clausola di guardia

Controllo rapido: quale definizione descrive meglio una clausola di guardia?

Riepilogo

Riepilogo: convalidi subito gli argomenti con le clausole di guardia, generi eccezioni specifiche per gli errori del programmatore e utilizzi TryParse per i normali input dell'utente.

Domande Frequenti

La lezione «Pattern di guardia e convalida» è gratuita?

Sì — il testo completo di «Pattern di guardia e convalida» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «Pattern di guardia e convalida»?

Convalidate subito gli input con clausole di guardia, sollevate le eccezioni corrette e usate controlli in stile TryParse per i dati degli utenti. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 3.

Quanto tempo richiede la lezione «Pattern di guardia e convalida»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Astrazioni per il logging, Debug/Trace
  2. Profilazione e trace di base (concetti)
  3. Pattern di guardia e convalida
← Torna a C# Academy