Busqueda local

Loading

lunes, 14 de febrero de 2011

Entendiendo las Lambdas

NO es posible entender las expresiones lambdas sin conocer los métodos anónimos. Un método anónimo, según la explicación más simple que pude encontrar es: un evento directamente asociado a un bloque de código. Así que son métodos que se definen en la misma línea.
Una expresión Lambda tiene la habilidad de manejar eventos en la misma línea de codigo, asignando un bloque de código directamente a un evento usando métodos anónimos. Las lambdas son una forma muy concisa de crear métodos anónimos.
Aprender a emplearlas, nos permite simplificar nuestro código en .NET.
Si investigamos un poco en Internet, encontraremos ejemplos con expresiones y con declaraciones, la única diferencia es que las declaraciones se encierran entre llaves, como en un bloque de código.
Como se codifican?
Para crear una expresión Lambda en C# se emplea el operador lambda (=>) y se divide en dos partes:
  • Izquierda: Parámetros o variables de la función anónima.
  • Derecha: Bloque de código de la función.
  • En medio de ambas partes el operador.
Ejemplos:
Expresión: (a,b) => a > b;
Declaración: (a,b) => { a > b ? “A es mayor” : “B es mayor”;}
Y como se debe leer este ejemplo?
Hay varias formas de leerlo, algunas tiene que ver con el contexto en el cual se encuentre el código. A continuación como se lee la expresión.
  • Dados a y b, tal que a mayor que b.
  • Dados a y b, para los cuales a es mayor que b.
  • Existe una más que en ingles dice “goes to”, pero que en español tal vez tendría una traducción un poco fuera de lugar, porque diría: dados a y b van a a mayor que b.
Es obvio que este ejemplo resulta muy simple, pero la idea es que podamos ubicar las partes y al conocerlas podamos entenderlas mejor.
El mayor uso que nos ofrecen es como parámetro dentro de los métodos extendidos en LINQ,
get
sin embargo podemos usarlas al trabajar con colecciones:
List<Clientes> listado = _repositorio.GetAll();
List<Autorizados> autorizados = new List<Clientes>();
listado.ForEach( x =>
                     {
                       if(x.Autorizado)
                       { 
                              autorizados.Add(x);
                       }
                   }
);
Al principio la sintaxis nos parece extraña, sin embargo una vez que nos hemos familiarizado con ella, es mucho más rápido…es como un atajo a la forma tradicional de escribir este código.
Consideraciones al usar Lambdas
  • Se debe usar el operador (=>).
  • Para regresar un valor no es necesario emplear la instrucción Return.
  • No es necesario indicar el tipo de los parámetros, este se infiere.
  • Si declaramos el tipo de alguno, entonces será necesario indicar el de todos.
  • No podemos usar parámetros opcionales.
  • Tampoco podemos establecer el uso de ref, out o generic.
  • Estos parámetros solo son visibles dentro del código lambda.

No hay comentarios:

Publicar un comentario