Definiamo con questo nome le funzioni che permettono di rendere più pulito e leggibile un codice: esse, infatti, forniscono scorciatoie per ordinare, filtrare, e lavorare con informazioni presenti negli elenchi. Esse sono chiamate anche “funzioni anonime” poiché non hanno un nome. Vediamo, dunque, in che modo la funzione lambda lavora con gli item di una lista mediante il seguente esempio. Supponiamo di dover considerare la classe Customer definita in questo modo:
public class Customer
{
public int CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public bool IsDirty { get; set; }
}
Normalmente, si otterrebbero i dati dei clienti da una tabella ma ai fini di questo esempio, questo codice crea l’elenco:
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"}};
Ora che abbiamo un elenco, supponiamo di voler trovare il cliente che ha un ID di 4. Potremo raggiungere questo obiettivo usando un ciclo for / each:
Customer foundCustomer = null;
foreach (var c in custList)
{
if (c.CustomerId == 4)
{
foundCustomer = c;
break;
}
}
Tuttavia, è possibile raggiungere lo stesso risultato in con un minor numero di codici utilizzando la funzione lambda
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”, ma 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);
Il linguaggio che abbiamo utilizzato per definire questa funzione lambda è C#. L’equivalente funzione trascritta utilizzando il linguaggio VB sarà la seguente:
Dim foundCustomer = _
custList.FirstOrDefault(Function(c) _
c.CustomerId = 4)
Il principale svantaggio della funzione lambda è che l’applicazione di questo tipo di espressioni risulta essere di scarsa utilità al di fuori del contesto di definizione.