Veamos qué son las Lambda Expression y Expression Tree
Una expresion lambda es basicamente la generalizacion (aún más) de un delegado o metódo anonimo.
Tienen la forma: Func<int,bool> fx=i=>i>0; donde lo que esta a la izquierda de "=>" es el parametro y lo que esta a su derecha es la "expression" evaluada que se devuelve. En este caso la evaluacion es un valor booleano.
Ademas "fx" puede llamarse como un método común y corriente de la forma "fx(23)".
Una expresión lambda es una función o una subrutina sin nombre que se puede utilizar donde haya un delegado válido. Las expresiones lambda pueden ser funciones o subrutinas y tener una sola línea o varias líneas. Pueden pasar valores del ámbito actual a una expresión lambda.
Por otro lado una Expression Tree es simplemente el codigo anterior traducido a un "arbol binario" donde cada nodo es una "expression" y esta es "algo" que se puede evaluar ya sea para generar un valor booleano o numerico o el objeto que sea. Las Expression Tree son el resultado de la "compilacion" de una expression Lambda.
La pregunta que surge es: que tienen de "picante" las lambdas y las expression tree?
Lo bueno es que con las lambdas podemos expresar un comportamiento in-line dentro de un metodo "verdadero" y sin necesidad de crear otro método aparte.
Cómo se crea un expression tree? Hay dos formas pero vamos a ver la primera por ahora:
Expression<Func<int, bool>> lambda = num => num < 5;
Pero de nuevo, que tienen de bueno las expression tree? Lo bueno es que un arbol asi puede procesarse mucho mas rápido (porque es binario) y de alguna forma su "generacion" no es "unica" sino que diferentes "Proveedores" podrian generar su propio "expression tree" en funcion de su implementacion segun sus fines.
El ejemplo mas facil de entender es el de las expresiones lambda sobre fuentes de datos asociadas a una base de datos real. Las expresiones lambda le decimos en estos casos una "LINQ" y cuando se procesan en tiempo de ejecucion se transforman en un Expression Tree el cual su proveedor puede transformar en una consulta "SQL" entendible por el motor de base de datos que hay debajo.
Un artículo para profundizar más sobre el tema (ingles)
No hay comentarios.:
Publicar un comentario