Entendiendo las expresiones Lambda

Entendiendo las expresiones Lambda
LambdaExpressions

Las expresiones Lambda son fáciles de utilizar, pero cuando las ves por primera vez, te pueden confundir bastante. En este artículo intentaré plasmar una evolución del código lambda para que se entienda su origen. Más adelante, iremos practicando para coger una mayor destreza.

Evolución

Si nos remontamos en una época donde .NET 1.0 molaba, podríamos expresar un simple controlador de eventos (event handler) de la siguiente manera:

public MainWindow() { InitializeComponent(); this.ButtonNET1.Click += new RoutedEventHandler(this.ButtonBase_OnClick); } private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { MessageBox.Show("Hola Geeky Theory!! Os saludo desde 13-02-2002"); }

En el .NET 2.o podríamos simplificarlo de la siguiente manera:

event handlerDelegates

public MainWindow() { InitializeComponent(); this.ButtonNET1.Click += delegate(object sender, RoutedEventArgs e) { MessageBox.Show("Hola Geeky Theory!! Os saludo desde 07-11-2005"); }; }

Usando .NET 3.0, entra la sintaxis de lambda en juego. El código se simplifica aún más.

public MainWindow() { InitializeComponent(); this.ButtonNET1.Click += (sender, e) => MessageBox.Show("Hola Geeky Theory!! Os saludo desde 06-11-2006"); }

Como vemos, las expresiones lambda en C# se introducen a finales de 2006. Pero, ¿cómo se construye el último ejemplo mostrado con expresión lambda? Sigue leyendo

¿Qué son las expresiones Lambda?

Son funciones anónimas que se usan frecuentemente para crear delegates en LINQ. Son simples, sin ninguna declaraciones, es decir, sin modificadores de acceso, la declaración de valor de retorno y nombre.

Están en el lado derecho del operador =>. Una expresión lambda devuelve el resultado de la evaluación de la condición.

¿Por qué necesitamos expresiones lambda?

Más de uno se estará preguntando: ¿necesitamos un método sin un nombre? La respuesta es conveniencia.

Es una especie de taquigrafía que permite abreviar el método en el mismo lugar que se usará. Nos ahorra tiempo, espacio y además, es fácil de revisar el código. Simplemente cuando te acostumbres; tendrás los métodos más comunes a un punto y espacio de tu objeto.

Nota: Las expresiones lambda deben ser cortas, simples. Un definición compleja de la misma se podría convertir en nuestro enemigo.

¿Cómo definimos una expresión lambda?

La definición básica es: Parámetro => Código ejecutado

Veamos algunos ejemplos:

Un expresión bastante simple.

x => x == 5

Aquí podemos observar que al tener dos parámetros, necesitamos envolverlo en paréntesis separados por coma.

(x, y) => x == y

Aunque una de las feature que tenemos con los lambda expressions es el olvidarnos de los tipos, a veces, es difícil o imposible deducirlo por el mismo. Para ello, habrá que expresarlo de la siguiente manera:

(int x, string s) => s.Length > x

Para especificar cero parámetros de entrada, utilice paréntesis vacíos:

() => GeekyMethod()

Seguimos con unos ejemplos un poco más complejos. El elemento devuelve todos los elementos de la matriz de números hasta encontrar un número cuyo valor sea menor que su posición.

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);

lambdaexpressiondebug

Está claro que puedes hacer una infinidad de cosas con las expresiones lambda. Ahora te toca investigar a ti y que nos expreses tu dudas en los comentarios.

Hasta aquí es todo. Si os ha gustado, no os lo quedéis para vosotros, compartid

;)

Happy Coding!