expresiones ejemplos delegate curso delegates lambda closures imperative-languages

delegates - ejemplos - if lambda c#



¿Puedes explicar expresiones lambda? (7)

Este artículo debería ser relevante para tus intereses. Instintos básicos: expresiones Lambda

Realmente no tengo expresiones lambda. Si bien han existido desde los días de ALGOL, no comencé a escuchar sobre ellos hasta hace relativamente poco, cuando Python y Ruby se hicieron muy populares. Ahora que C # tiene la sintaxis => , las personas en mi mundo (.NET) están hablando de expresiones de lamdba cada vez más.

He leído el artículo de Wikipedia sobre el cálculo lambda, pero no soy un matemático. Realmente no lo entiendo desde una perspectiva práctica. ¿Cuándo usaría las expresiones lambda? ¿Por qué? ¿Cómo sabría que es lo que debería estar haciendo?

¿Puedes mostrar ejemplos de cómo resolverías problemas con expresiones lambda, en un formato de antes y después? Cualquier lenguaje imperativo está bien, pero C # sería más fácil de entender para mí.


Las funciones lambda son solo funciones anónimas.

Por ejemplo, en python, quiere duplicar todos los elementos en una lista. Hay más o menos tres formas de hacerlo:

Expresiones de lista:

[2*x for x in list]

función explícita:

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

con lambdas:

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

Por lo tanto, una lambda en la mayoría de los idiomas es solo una forma de evitar la carga sintáctica de crear una nueva función.


Mi principal uso de expresiones lambda en .NET ha sido cuando trabajo con listas. Usando una expresión lambda puede construir una consulta en una lista de manera similar a como construiría una declaración SQL para buscar en una tabla de base de datos.


Una expresión lambda es un valor funcional (en el mismo sentido que ''int'' y ''string'' son valores). Esto significa que es posible

  • define una variable que contiene una expresión lambda (esto es lo mismo que definir una función)
  • devolver una expresión lambda de un método o función
  • enviar una expresión lambda como argumento a una función o método

Eche un vistazo a funciones como mapa, filtro o plegado (en cualquier lenguaje funcional) para ver cómo se usan las expresiones lambda como argumentos para otras funciones.


Básicamente, en lo que se refiere a C #, las expresiones lambda son una forma fácil de crear un delegado (o un árbol de expresiones, pero dejemos de lado estas por ahora).

En C # 1, solo pudimos crear instancias delegadas a partir de métodos normales. En C # 2 obtuvimos métodos anónimos. En C # 3 ganamos expresiones lambda, que son como métodos anónimos más concisos.

Son particularmente concisos cuando quieres expresar alguna lógica que toma un valor y devuelve un valor. Por ejemplo, en el contexto de 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);

Hay una discusión más completa de esto, junto con otros aspectos, en mi artículo sobre cierres .