martes, 11 de noviembre de 2008

LinQ: Yo LinQueo, tú LinQuearás...

Últimamente he estado Offline debido a que mi tiempo libre se ha tornado en dedicación exclusiva a la atención de mi pequeño retoño, nacido recientemente. Espero seguir posteando con más frecuencia a partir de ahora
;-)

Recientemente he empezado a trastear con LinQ principalmente por conocer la tecnología, no por necesidades de desarrollo. Habiendo leído algún libro interesante acerca del tema (LINQ Unleashed) he de admitir que me ha sorprendido gratamente, empezando por el soporte que le han metido a C# para dar cabida a este nuevo framework de consultas integradas:

- Métodos de extensión: Eso de meter funcionalidad añadida a cualquier tipo del CLR (ya sea definido en el lenguaje o propio) aumenta la potencia y riqueza del lenguaje hasta límites insospechados. De hecho, es una de las características me más me gustan.
- Tipos anónimos: Al principio me sonaba a los tipos de Javascript, pero una vez que 'LinQueas', ves rápido la necesidad, sobre todo cuando se trata de proyecciones de tipos con la cláusula Select.
- Expresiones Lambda: Una vuelta de tuerca más a los delegados anónimos.

Es importante recalcar que estas nuevas funcionalidades no son exclusivas de LinQ, de ahí que cualquier programador las recibirá con los brazos abiertos en cuanto empiece a soportarlas en su código.

Una vez empiezas a meter métodos de extensión en tus propias clases, sientes la necesidad de que necesitas más potencia y organización para ciertos retos. En este punto aparecen los proveedores para LinQ. Por defecto el Framework trae varios proveedores interesantes: LinQ to SQL, to Objects, to XML. Crearse uno propio ya es harina de otro costal... Googleando he visto un interesantísimo tutorial creado por el padre de LinQ (Matt Warren).

En principio se trata de implementar un par de Interfaces, pero tengo que admitir que sin ver algo de código, esto no era ni mucho menos fácil (no veía las cosas claras con la manipulación de las expresiones). De hecho, no hay más que ojear el tutorial citado para comprobarlo (atención especial a 'su implementación' del patrón Visitor para desglosar las expresiones).