Parametri Opzionali e Argomenti Denominati in C#

Gli Argomenti Denominati e i Parametri Facoltativi sono due funzionalità diverse del linguaggio C#.

Tuttavia, spesso vengono utilizzati insieme. Questi parametri sono stati introdotti in C# versione 4.0.

I parametri opzionali consentono di saltare alcuni parametri quando un metodo viene invocato.

Gli argomenti denominati, invece, consentono di impostare i valori dei parametri del metodo tramite il loro nome, anziché la loro posizione esatta nell'elenco dei parametri.

Queste due caratteristiche della sintassi del linguaggio C# sono molto utili nei casi in cui si invoca un metodo con una combinazione diversa dei suoi parametri.

Parametri Opzionali

La dichiarazione dei parametri opzionali può essere fatta semplicemente utilizzando un valore predefinito nel modo mostrato di seguito:

static void Esempio(int x, int y = 5, int z = 7)
{
    // ...
}

Nell'esempio sopra, y e z sono opzionali e possono essere omessi durante l'invocazione del metodo:

static void Main()
{
    // Chiamata normale di Esempio
    Esempio(1, 2, 3);
    // Omettendo z - equivalente a Esempio(1, 2, 7)
    Esempio(1, 2);
    // Omettendo sia y che z – equivalente a Esempio(1, 5, 7)
    Esempio(1);
}

In questo esempio abbiamo che:

  1. Nel primo caso, tutti i parametri vengono passati: x = 1, y = 2 e z = 3.
  2. Nel secondo caso, viene omesso il parametro z, quindi x = 1, y = 2 e z = 7. In questo caso, il valore predefinito di z viene utilizzato.
  3. Nel terzo caso, vengono omessi sia y che z, quindi x = 1, y = 5 e z = 7. In questo caso, i valori predefiniti di y e z vengono utilizzati.

Un dettaglio fondamentale da tenere a mente è che i parametri opzionali devono essere dichiarati alla fine dell'elenco dei parametri del metodo.

Ad esempio, il seguente codice genererà un errore di compilazione:

// Errore: Parametro opzionale prima di un parametro obbligatorio
static void Esempio(int x = 1, int y, int z = 3)
{
    // ...
}

In questo caso, il parametro y è obbligatorio, ma è preceduto da un parametro opzionale. Questo è un errore di sintassi e il codice non verrà compilato.

Definizione

Parametri Opzionali

Un Parametro Opzionale è un parametro di un metodo che può essere omesso durante l'invocazione del metodo. I parametri opzionali devono avere un valore predefinito.

In fase di invocazione, i parametri opzionali possono essere omessi, e i valori predefiniti verranno utilizzati al loro posto.

La sintassi per dichiarare un parametro opzionale è la seguente:

tipo_ritorno NomeMetodo(tipo1 parametro1, tipo2 parametro2 = valore_predefinito)
{
    // ...
}

I parametri opzionali devono essere dichiarati alla fine dell'elenco dei parametri del metodo.

Argomenti Denominati

Tipicamente, in C# quando invochiamo un metodo dobbiamo rispettare l'ordine dei parametri definiti nel metodo. Ad esempio, se abbiamo il metodo che segue:

static void Esempio(int x, int y, int z)
{
    // ...
}

Dobbiamo passare i valori per x, y e z nell'ordine corretto:

Esempio(1, 2, 3);

In tal caso, 1 è passato per x, 2 per y e 3 per z.

Tuttavia, il C# mette a disposizione una particolare sintassi che ci permette di passare i valori dei parametri del metodo tramite il loro nome, anziché la loro posizione esatta nell'elenco dei parametri. Questa funzionalità è chiamata Argomenti Denominati.

Un esempio di utilizzo degli argomenti denominati è mostrato di seguito:

static void Main()
{
    // Passando z per nome e x per posizione
    Esempio(1, z: 3);
    // Passando sia x che z per nome
    Esempio(x: 1, z: 3);
    // Invertendo l'ordine degli argomenti passati per nome
    Esempio(z: 3, x: 1);
}

Tutte le invocazioni nell'esempio sopra sono equivalenti tra loro: il parametro y è omesso, ma x e z sono impostati rispettivamente a 1 e 3.

L'unica differenza tra la seconda e la terza chiamata è che i valori dei parametri vengono calcolati nello stesso ordine in cui vengono passati al metodo. Nell'ultima invocazione, 3 verrà calcolato prima di 1.

In questo esempio, tutti i parametri sono costanti e il loro scopo è solo chiarire l'idea dei parametri nominati e opzionali. Tuttavia, la considerazione menzionata può portare a comportamenti imprevisti quando l'ordine di calcolo dei parametri è importante.

Definizione

Argomenti Denominati

Un Argomento Denominato è un argomento di un metodo che può essere passato tramite il nome del parametro, anziché la sua posizione nell'elenco dei parametri.

La sintassi per passare un argomento denominato è la seguente:

NomeMetodo(parametro1: valore1, parametro2: valore2)

Gli argomenti denominati possono essere utilizzati in qualsiasi ordine, ma devono essere separati da virgole.

Conclusione

In questo articolo abbiamo visto come utilizzare i parametri opzionali e gli argomenti denominati in C#. Queste due funzionalità sono molto utili per rendere il codice più leggibile e manutenibile, specialmente quando si invocano metodi con un numero variabile di parametri.

Inoltre, abbiamo visto che i parametri opzionali devono essere dichiarati alla fine dell'elenco dei parametri del metodo, mentre gli argomenti denominati possono essere passati in qualsiasi ordine.

Nel prossimo articolo, vedremo come utilizzare l'Overload dei Metodi in C#.