Vai al contenuto principale
Pubblicato il

Lambda in C#

Condividi:

Introduzione

Le espressioni lambda sono diventate uno strumento indispensabile per i programmatori C#. Offrono una scrittura concisa, flessibilità e la capacità di creare funzioni al volo.

Origini delle Espressioni Lambda

Derivate dal calcolo lambda, una struttura formale nella teoria della computazione, le funzioni lambda sono ora un pilastro in diversi linguaggi di programmazione moderni. C# ha incorporato questa funzionalità, consentendo ai programmatori di sfruttare i vantaggi delle funzioni anonime.

Sintassi Lambda in C#

L'espressione lambda in C# utilizza l'operatore =>. A sinistra di questo operatore si specificano i parametri e a destra l'espressione o il blocco di codice.

(param1, param2) => param1 * param2;
using System;
using System.Linq;

namespace Base {
  class Lambda {
    private int[] numeri = new int[] {
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
    };

    public void Run() {
      Console.WriteLine($"Totale numeri pari: {numeri.Count(numero => numero % 2 == 0)}");
      Console.WriteLine($"Totale numeri dispari: {numeri.Count(numero => numero % 2 != 0)}");
    }

    private int ContareNumeriPari() {
      var contatore = 0;

      foreach (var numero in numeri) {
        if (numero % 2 == 0)
          contatore++;
      }

      return contatore;
    }

    private int ContareNumeriDispari() {
      var contatore = 0;

      foreach (var numero in numeri) {
        if (numero % 2 != 0)
          contatore++;
      }

      return contatore;
    }
  }
}

Vantaggi dell'Utilizzo di Lambda in C#

  1. Concisione: Riduce la necessità di scrivere metodi completi, rendendo il codice più pulito.
  2. Flessibilità: Facilmente utilizzate come argomenti o restituite come valori.
  3. Leggibilità Migliorata: Il codice diventa più espressivo e leggibile.

Relazione con Delegates, Func e Action

  • Delegates: Sono tipi di riferimento che possono referenziare qualsiasi metodo con lo stesso insieme di parametri e tipo di ritorno. Le espressioni lambda sono spesso associate ai delegates.
  • Func: È un delegate che può avere zero o più parametri e restituisce un valore. L'ultima specifica di tipo è sempre il tipo di ritorno.
  • Action: Simile a Func, ma non restituisce un valore (void).

LINQ e Espressioni Lambda

LINQ (Language-Integrated Query) è un insieme di estensioni di metodi che consente l'esecuzione di query complesse su collezioni. LINQ utilizza le espressioni lambda in modo estensivo, rendendo la query di dati su collezioni, database e XML molto più semplice e intuitiva.

var pari = numeri.Where(numero => numero % 2 == 0);

Casi d'Uso Comuni

  • Manipolazione di Collezioni: Filtrare, ordinare e trasformare collezioni.
  • Eventi e Delegates: Sostituire i metodi anonimi con espressioni lambda.
  • Asynchronous Programming: Usare espressioni lambda con Task.Run() o async e await.

Conclusione

La capacità di utilizzare espressioni lambda in C# permette ai programmatori di scrivere codice più pulito, efficiente ed espressivo. Comprendendo la loro origine, sintassi e vantaggi, si può davvero iniziare a sfruttare al massimo questa potente caratteristica.

Happy coding!