C# 3.0 incluye una nueva característica llamada expresiones Lambda. Las expresiones lambda son los fundamentos sobre los que se constuye LINQ. Estas provienen del paradigma de programación funcional. En el mundo de la programación funcional, las expresiones lambda son un mecanimos para definir métodosTal y como comenta elGuille, las expresiones lambda facilitan la metaprogramación (es decir, programas que controlan otro programas). 

Las expresiones lambda pueden considerarse una extensión de los métodos anónimos. Una de las características que más valoran los arquitectos .NET es que una expresión lambda tanto puede ser invocada como utilizada como un dato corriente.
Para implementar expresiones lambda en C# es necesario hacer uso de delegados.
La sintaxi para crear expresiones lambda es la siguiente en C#:

delegate T NombreDelegado<T>(–parametros–);

A bote pronto, esto parece chino. Pero podemos empezar a desgranar esta expresión. En realidad se está declarando un delegado genérico que devolverá como valor un objeto del tipo T que es el mismo tipo que trata en su interior. T puede ser cualquier tipo de objeto. Ejemplo:

delegate T MiFuncion<T>(T x); –> Primero declaramos el delegado que mapea la función.

MiFuncion<int>cuadrado= x =>x*x; –> Especificamos la función lambda.

Podriamos leer la segunda linea como:

Se define una función llamada cuadrado que devolverá un valor entero y que, dado un valor ‘x’ devuelve el valor ‘x’ multiplicado por ‘x’. 

Para nuestro caso, y para el 90% de los casos, será más útil y recomendable utilizar el tipo genérico predefinido Func y cualquiera de sus sobrecargas. De forma que el mismo ejemplo anterior quedaría como:

Func<int> cuadrado = x => x*x;

Podríamos utilizar esta expresión lambda como parámetro de una función, de la misma forma que pasaríamos cualquier otro objeto.

En próximos artículos se explicará cómo utilizar las expresiones lambda para generar arboles de procesado.

 

Hasta otra!