Il pattern matching ha trasformato il modo di scrivere logica condizionale in C#. Combinato con i record, permette di esprimere regole complesse in poche righe leggibili.
Espressioni switch con proprietà
public record Ordine(decimal Totale, string Paese, bool ClientePremium);
decimal Spedizione(Ordine o) => o switch
{
{ ClientePremium: true } => 0m,
{ Paese: "IT", Totale: >= 50m } => 0m,
{ Paese: "IT" } => 5.90m,
{ Totale: >= 150m } => 9.90m,
_ => 19.90m
};
Le regole si leggono dall'alto verso il basso e il compilatore avvisa se un caso non è mai raggiungibile.
Pattern relazionali e logici
string Fascia(int eta) => eta switch
{
< 0 => throw new ArgumentOutOfRangeException(nameof(eta)),
< 18 => "minorenne",
>= 18 and < 65 => "adulto",
_ => "senior"
};
List pattern
I list pattern confrontano la forma di un array o di una lista: primo elemento, ultimo, lunghezza, porzioni.
string Descrivi(string[] argomenti) => argomenti switch
{
[] => "nessun comando",
["help"] => "mostra la guida",
["copy", var da, var a] => $"copia {da} in {a}",
["log", .. var resto] => $"log con {resto.Length} opzioni",
_ => "comando sconosciuto"
};
Consigli
- Metti i casi più specifici prima di quelli generici.
- Evita espressioni switch troppo lunghe: oltre una decina di casi valuta una tabella di regole.
- Con le gerarchie chiuse di record, il compilatore aiuta a non dimenticare casi.
Commenti (0)
Nessun commento ancora.