4 de febrero de 2010

C# Expresiones Lambda

Veamos ejemplos prácticos y sencillos del uso de expresiones lambda, de forma que nos quede claro su concepto y su uso.

¿Que es una expresión lambda?

"Una expresión lambda es una función anónima que puede contener expresiones e instrucciones y se puede utilizar para crear delegados o tipos de árboles de expresión".

Una forma más simple de definirla sería:

  • Para definir una expresión lambda se usa el llamado operador lambda (=>).
  • A la izquierda de este operador se indicarán las variables o parámetros de la función anónima.
  • A la derecha del operador indicaremos el código de la función (la expresión o bloque de instrucciones).

Hasta aquí la definición más sencilla posible, pero igualmente algo complicada de entender, expliquémosla a través de ejemplos abstractos con la esperanza de que se comprenda mejor:

Ejemplo Básico de Expresión Lambda

delegate int SumaDeledado(int a, int b);
SumaDeledado SumaFuncion = (a, b) => a + b;

Ejemplos de Expresiones Lambda en LINQ

El principal uso de las expresiones lambda está vinculado con las expresiones de consultas LINQ. Así que veamos algunos ejemplos de estas expresiones, estos ejemplos son bien sencillos pero nos vienen bien para comprender el uso de las expresiones lambda.

  int[] nums = { 3, 4, 5, 6, 4, 5, 7 };
 
  var numMayores = nums.Where(n => n > 5).ToList();
  var numPares = nums.Where(n => n % 2 == 0).ToList();
  var numImpares = nums.Where(n => n % 2 != 0).ToList();

El en código de ejemplo anterior tenemos 3 consultas LINQ:

  • La primera consulta la usamos para guardar en la variable de tipo anónimo (numMayores) los números que sean mayores de 5, y para lograrlo usamos la expresión lambda (n => n > 5). El resultado sería evidentemente { 6, 7 }.
  • En la segunda consulta (numPares) obtendremos los números pares usando la siguiente expresión lambda (n => n % 2 == 0). El resultado sería evidentemente { 4, 6, 4 }.
  • En la tercera consulta (numImpares) obtendremos los números impares usando la siguiente expresión lambda (n => n % 2 != 0).

Expresiones Lambda Consideraciones

Condiciones que debemos tener en cuenta a la hora de definir una expresión lambda:

  • Las expresiones lambda se definen usando el operador lambda =>.
  • Para devolver el valor no se utiliza la instrucción return, (salvo que el contenido de la expresión lambda sea un bloque encerrado entre llaves).
  • Los tipos de los parámetros de las expresiones lambda siempre se infieren, ya que siempre habrá algún delegado asociado con el uso de la expresión lambda. Si se indica el tipo de uno de los parámetros, debemos indicarlos todos, independientemente de que se pueda inferir el tipo.
  • Los parámetros de la expresión lambda no pueden ser opcionales, por tanto, no podemos usar params.
  • Los parámetros no pueden ser de tipo ref u out.
  • No podemos indicar parámetros generic.
  • Los nombres de los parámetros no pueden ser los mismos que los de otros elementos que estén en el mismo ámbito.
  • Los parámetros de una expresión lambda son solo visibles dentro de esa función.
  • Las expresión lambda las podemos usar para cualquier tipo de delegado, ya sean definidos por nosotros o los definidos por el propio .NET.

Y hasta aquí esta charla sobre expresiones lambda, espero te halla servido para comprender un poco mejor esta interesante característica.

Artículos Relacionados: