Domanda

In realtà non ottengo espressioni lambda. Mentre sono in giro dai tempi di ALGOL, non ho iniziato a sentir parlare di loro fino a poco tempo fa, quando Python e Ruby sono diventati molto popolari. Ora che C # ha la sintassi = > , le persone nel mio mondo (.NET) parlano sempre più di espressioni lamdba.

Ho letto l'articolo di Wikipedia sul calcolo lambda, ma non sono proprio un ragazzo di matematica. Non lo capisco davvero da una prospettiva pratica. Quando dovrei usare le espressioni lambda? Perché? Come faccio a sapere che è quello che dovrei fare?

Puoi mostrare esempi di come risolveresti i problemi con le espressioni lambda, in un formato prima e dopo? Qualsiasi linguaggio imperativo va bene, ma C # sarebbe più facile da capire per me.

È stato utile?

Soluzione

Fondamentalmente per quanto riguarda C #, le espressioni lambda sono un modo semplice per creare un delegato (o un albero di espressioni, ma per ora lasciamo da parte quelle).

In C # 1 abbiamo potuto creare solo istanze delegate da metodi normali. In C # 2 abbiamo ottenuto metodi anonimi. In C # 3 abbiamo ottenuto espressioni lambda, che sono come metodi anonimi più concisi.

Sono particolarmente concisi quando si desidera esprimere una logica che accetta un valore e restituisce un valore. Ad esempio, nel contesto di LINQ:

                       // Only include children - a predicate
var query = dataSource.Where(person => person.Age < 18) 
                       // Transform to sequence of names - a projection
                      .Select(person => person.Name);

C'è una discussione più approfondita di questo - insieme ad altri aspetti - in il mio articolo sulle chiusure .

Altri suggerimenti

Le risposte a questa domanda potrebbero esserti utili.

Le funzioni lambda sono solo funzioni anonime.

Ad esempio, in Python, si desidera raddoppiare tutti gli elementi in un elenco. Ci sono praticamente tre modi per farlo:

Elenco espressioni:

[2*x for x in list]

funzione esplicita:

def double(x):
    return 2*x
map(double, list) # iirc

con lambdas:

double = lambda x : 2*x
map(double, list)

Quindi, un lambda nella maggior parte delle lingue è solo un modo per evitare il sovraccarico sintattico della creazione di una nuova funzione.

Questa è una delle migliori spiegazioni che ho visto su come comprendere le grandi idee nell'uso delle espressioni lambda in C #:

http: / /www.developingfor.net/c-30/upgrade-your-c-skills-part-3-lambda-expressions.html

Il mio uso principale delle espressioni lambda in .NET è stato quando ho lavorato con le liste. Usando un'espressione lambda puoi creare una query su un elenco in modo simile a come creeresti un'istruzione SQL per cercare una tabella di database.

Un'espressione lambda è un valore funzionale (nello stesso senso in cui "int" e "stringa" sono valori). Ciò significa che è possibile

  • definisce una variabile che contiene un'espressione lambda (è uguale alla definizione di una funzione)
  • restituisce un'espressione lambda da un metodo o una funzione
  • invia un'espressione lambda come argomento a una funzione o metodo

Dai un'occhiata a funzioni come map, filter o fold (in qualsiasi linguaggio funzionale) per vedere come le espressioni lambda sono usate come argomenti per altre funzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top