Le funzioni lambda sono delle funzioni molto utilizzate con il fine di rendere più pulito e leggibile un codice. Esse sono chiamate anche “funzioni anonime” poiché non hanno un nome Con queste espressioni è possibile definire una “entità” invocabile in maniera diretta, perciò la definizione di una funzione lambda risulta meno prolissa della definizione di una funzione creata ad hoc ed ha il vantaggio di essere localizzata nel contesto d’uso. Il principale svantaggio è che l’applicazione di questo tipo di espressioni risulta essere di scarsa utilità al di fuori del contesto di definizione. Un largo uso di delle espressioni lambda viene fatto con le liste. Vediamo un esempio in cui si è creata una lista di individui,rappresentati da una key variable “CostumerId”, in cui si vogliono ottenere le informazioni dell’individuo con ID 4.
List<Customer> custList = new List<Customer>
{new Customer()
{ CustomerId = 1,
FirstName="Bilbo",
LastName = "Baggins",
EmailAddress = "bb@hob.me"},
new Customer()
{ CustomerId = 2,
FirstName="Frodo",
LastName = "Baggins",
EmailAddress = "fb@hob.me"},
new Customer()
{ CustomerId = 3,
FirstName="Samwise",
LastName = "Gamgee",
EmailAddress = "sg@hob.me"},
new Customer()
{ CustomerId = 4,
FirstName="Rosie",
LastName = "Cotton",
EmailAddress = "rc@hob.me"}};
//per estrarre l'individuo d'interesse
Customer foundCustomer = null;
foreach (var c in custList)
{
if (c.CustomerId == 4)
{
foundCustomer = c;
break;
}
}
Per ottenere le informazioni riguardo all’individuo di nostro interesse, sono state utilizzate poche righe di codice, ma con l’utilizzo della lambda expression, basterà una sola riga:
var foundCustomer = custList.FirstOrDefault(c => c.CustomerId == 4);
L’operatore “=>” è detto operatore lambda; è utilizzato per separare il parametro, o i parametri, dell’espressione lambda, dall’espressione stessa. E’ importante notare che in questo esempio, il parametro lambda c, che rappresenta tutti i valori nella lista, è un oggetto di tipo “Costumer”, m questo tipo non è stato specificato. le espressioni lambda infatti utilizzano la conversione di tipo implicitamente si volesse cambiare il tipo del parametro dell’espressione (cosa solitamente desueta), si può scrivere:
Customer foundCustomer = custList.FirstOrDefault((Customer c) => c.CustomerId == 4);
In questo caso il parametro, e il tipo, sono inseriti tra parentesi tonde, mentre nell’esempio precednte, quenado non è stato specificato il parametro, no. Ciò è dovuto al fatto che l’espressione lambda non richiede le parentesi tonde se il parametro è uno solo o se si utilizza il tipo di default. Nel caso in cui non ci fossero parametri, la sintassi dell’espressione richiede una coppia di parentesi tonde vuote.
Come abbiamo, quindi, potuto notare con questo banale esempio in C#, l’utilizzo delle espressioni lambda permette di risparmiare tempo e rende il codice più scorrevole sia per la lettura che per la scrittura del codice stesso.
