sábado, 8 de mayo de 2010

Arboles de Expresiones en C#

Los Arboles de expresiones son una de las facetas diferentes de representación y utilización de las funciones lambda, y en específico en forma de datos. Las expresiones lambda se compilan como código o como datos en dependencia del contexto en que se utilizan. Es importante destacar que para la utilización de las funciones lambda podemos utilizar variables de tipo delegado (Variables que representan a una función) o variables genéricas.

Es importante aclarar que en algunos lenguajes se permite manejar código como si fueran datos y los datos como si fueran código. A esta característica se le conoce como homoiconic.

Si asignamos una expresión lambda a una variable de tipo delegado, el compilador generará un código ejecutable de ello. Sin embargo, si asignamos la expresión lambda a una variable del tipo genérico Expression, el compilador no la traducirá a código ejecutable, sino que generará una estructura de datos en memoria que representa a la expresión en sí. Estas estructuras de datos es la que en C# se denomina árboles de expresiones.

Una vez que se ha construido un árbol de expresión, este puede ser manipulado, modificado, seriado y distribuido a través de la red. Cabe destacar que contamos con todos los mecanismos necesarios para la compilación de arboles de expresiones gracias a la clase Expression.

Entre los elementos más importantes descendientes de la clase Expression contamos con los siguientes:


1) Lambda Expression: Sirve como un puente entre la clase Expression y la clase Expression no genérica. Sus principales propiedades son Body o Cuerpo y Parameters o Parámetros.

2) ParameterExpression: Mediante los objetos de este tipo se representan los parámetros de una expresión. La propiedad principal de este objeto es Name o nombre del parámetro.

3) ConstantExpression: Mediante este objeto se representan valores de tipo de tipo constantes de una expresión determinada.


Referencias: http://www.elguille.info/NET/futuro/firmas_octavio_ArbolesExpresiones.htm


2 comentarios:

  1. En mi opinión es importante como programadores conocer estas características en los lenguajes de programación. Creo que de mi parte debo estudiar mas los conceptos de variable delegada que es la que me falta asentar.

    ResponderEliminar
  2. No olvide al final de cada post colocar su opinión personal del tema y mantener información un poco más extensa.

    ResponderEliminar