Expresiones Lambda
En este post vamos a ver lo que son las expresiones lambda en lenguaje C#, como y cuando utilizarlas, así como varios ejemplos detallados paso por paso.
Todo esto lo vamos a desarrollar sobre el entorno de Visual Studio 2017.
El objetivo de este post es que cualquier persona, sin importar el nivel de conocimientos, pueda poner en práctica de una manera rápida y sencilla este tipo de expresiones.
Lo primero que vamos a ver es una pequeña definición de este tipo de expresiones y los puntos fuertes a tener en cuenta con sus respectivas ilustraciones para una mejor visualización y correcto entendimiento.
Posteriormente, mediante algunos ejemplos, veremos la funcionalidad y la utilización de expresiones Lambda sobre el entorno de desarrollo.
Por último, al final de este post dejare un enlace al repositorio de GitHub, donde cualquier persona interesada en el código que posteriormente desarrollaremos, pueda acceder y descargarse el proyecto completo con los ejemplos vistos.
Además, he grabado un video tutorial técnico en el cual se puede ver con claridad el funcionamiento de estas expresiones en la práctica sobre Visual Studio.
¿Qué es una expresión Lambda?
Una expresión lambda es una función anónima que se puede usar para crear tipos delegados o de árbol de expresión .
Al utilizarlas, estamos utilizando funciones locales que se pasan como argumento o devolverse como valor de llamadas de función.
Para crear una expresión lambda, especifique los parámetros de entrada (si existen) a la izquierda del operador lambda => y coloque el bloque instrucciones en el otro lado.
Por ejemplo, la expresión lambda x => x * x especifica un parámetro denominado x y devuelve el valor del cuadrado de x.
-Cabe destacar los siguientes puntos:
• Nos permite acceder a las propiedades de un objeto, una vez que ha sido creado.
variable => variable. PROPIEDAD
• Es una expresión que permite la generación de objetos de forma dinámica.
• Nos permite realizar acciones sobre objeto u objetos una vez generados.
• Son muy útiles para escribir expresiones de consulta LINQ.
Ejemplos de expresiones Lambda
El proyecto va a ser sobre el entorno de desarrollo de Visual Studio y va a ser de tipo Windows Forms.
Sobre el formulario he creado un campo de texto y dos botones para mostrar los resultados.
En este primer ejemplo vamos a crear una colección rellena de números enteros del uno al diez sobre la que vamos a trabajar.
El objetivo de este ejemplo es ver como mediante una expresión Lambda (función anónima) vamos a trabajar sobre un objeto ya creado, la lista números, para evaluar los números que hay en su interior y recuperar los números pares.
La expresión que utilizaremos será la siguiente:
i => i % 2 == 0
Donde “i” es cada uno de los números que la lista contiene en su interior (estos a su vez también son objetos con sus propiedades).
En este caso estamos preguntado si el resto de la división del número “i” entre 2 es igual a 0, en caso afirmativo el numero evaluado seria par y la expresión devolvería “True”, de lo contrario sería impar y devolvería “False”.
Ahora vamos a llevarnos esta expresión a la práctica y lo que queremos hacer es sacar los números pares que hay en la lista ya creada y añadirlos a otra lista que se va a llamar númerosPares.
Como se puede ver la expresión lambda funciona correctamente:
Ahora sobre el mismo ejemplo vamos a cambiar la expresión para que sean los impares:
i => i % 2 != 0
La expresión es la misma solo que ahora el resto NO tiene que ser cero, es decir, será impar:
El resultado será el siguiente:
El segundo ejemplo que vamos a ver es muy similar a este que hemos visto, de hecho, reutilizaremos parte del código.
El objetivo de este segundo ejemplo es ver que las expresiones lambda son funciones anónimas, es decir, son funciones que se utilizan en ámbito local, no se las puede llamar como al resto de funciones.
En este caso vamos a meter bloque de código en lo que sería la función anónima del caso anterior para que evalúe mediante una condición si es par o impar y me lo muestre por cada uno de los números de la lista del ejemplo anterior.
La parte en amarillo seria la expresión lambda o función anónima.
En este caso se puede ver claramente que es una función normal solo que solo se puede utilizar donde está definida, no la podemos llamar posteriormente.
El resultado sería:
Como he explicado al principio del post con las expresiones lambda se pueden crear tipos delegados.
• Un delegado es un tipo que encapsula de forma segura un método.
• los delegados están orientados a objetos.
• proporcionan seguridad de tipos y son seguros.
En este tercer ejemplo lo que vamos a hacer es crear un tipo delegado, para lo que vamos a utilizar lambda.
delegate int del(int i);
Estamos creando un delegado que se llama “del” que puede encapsular un método que toma un entero “int i” y devuelve un entero “int”.
Este ejemplo consistirá que sacar el cuadrado de los números debido a la expresión lambda:
x => x * x
Donde “x” es cada uno de los números de la lista.
Como veis en las expresiones lambda los parámetros tanto de entrada como de salida pueden llamarse como quieras.
Sería igual la expresión arriba declarada que esta:
i => i * i
En este ejemplo tenemos dos expresiones lambda:
• La primera me devuelve los pares (igual que el primer ejemplo)
• La segunda mediante el delegado estamos sacando el cuadrado del número que estamos recorriendo con el bucle.
Vamos a mostrar el cuadrado de los números pares:
Y para sacar el cuadrado de todos eliminaríamos la primera expresión y pasaríamos la lista completa al bucle:
Resultado:
Con este ejemplo acabo, espero que os haya servido este post-tutorial sobre este tipo de expresiones y realmente la gran utilidad que tiene el conocimiento de lambda.
Como he comentado anteriormente, tienen gran utilidad en las consultas de LinQ pero me parecía más didáctico empezar por la explicación simple de estas funciones anónimas y lograr su entendimiento para posteriormente poder incorporarlas en proyectos MVC, consultas a bases de datos…etc.
Os dejo los enlaces de GitHub con el proyecto utilizado y del video tutorial con la realización de los ejemplos.
Gracias, espero que haya sido de ayuda.
Autor/a: Álvaro Camarero Barrio
Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin
Centro: Tajamar
Año académico: 2017-2018
GitHub: https://github.com/alvaromad/ExpresionesLambda.git
Stream: https://web.microsoftstream.com/video/c1667626-9a7d-4feb-a961-0563f1c62181?list=studio