el Guille, la Web del Visual Basic, C#, .NET y más...

Novedades de Visual Basic 9.0

(Parte 3 de 9)

 
Publicado el 22/Jul/2007
Actualizado el 22/Jul/2007
Autor: Guillermo 'guille' Som

Novedades de Visual Basic 9.0 (Parte 3 de 9): LINQ. Inferencia de tipos. Tipos anónimos.



 

LINQ

Bueno, esto de LINQ tiene tema para escribir un libro (o dos).

Resumiendo mucho, LINQ lo que nos permite es crear expresiones de "consultas", es decir, se usan las instrucciones "típicas" de las consultas de SQL: SELECT, FROM, JOIN, WHERE, ORDER BY, etc.

Lo bueno, es que esas instrucciones de consultas están incluidas en el propio lenguaje, y lo mejor es que... ¡no solo sirven para trabajar con acceso a datos!

Por ejemplo, podemos hacer algo así:

Dim res = From n In New Integer() {1, 2, 5, 3, 6, 7, 4} _
          Where n > 3 _
          Select n

For Each i In res
    Console.WriteLine(i)
Next

Listado 1. Ejemplo de LINQ

Y el bucle final mostrará los valores 5, 6, 7 y 4, que son los que cumplen la condición.

Para que el uso de LINQ sea posible, se han tenido que agregar a Visual Basic (y a C#) nuevas características, entre ellas:

 

Inferencia de tipos

En inglés: Local variable type inferencing. Esto significa que el compilador es capaz de "adivinar" el tipo de datos que se le asigna a una variable.

En el ejemplo anterior, (Listado 1), la variable res es del tipo IEnumerable(Of Integer), que es el tipo que devuelve la "expresión LINQ".
La variable n después de From es de tipo Integer y la variable i del bucle también es de tipo Integer, ya que ese es el tipo de datos que devuelve la "colección" res.

De forma más simple, puedes verlo así:

Dim num1 = 10
Dim num2 = 10.5
Dim s = "Hola"

En este caso, la variable num1 es de tipo Integer, num2 es de tipo Double y s es de tipo String.

Si tienes el Visual Basic (cualquier versión) puedes escribir ese mismo código, pero para ello tendrá que tener Option Strict desconectado y las tres variables serán de tipo Object.

Para que esta característica esté disponible en Visual Basic 2008, debe estar conectada la opción Option Infer, que por defecto está en "ON".

 

Tipos anónimos

En inglés: Anonymous types. Pero... si en vez de devolver un "simple" valor entero, (tal como se hace en el código del listado 1), quieres devolver algo más "sofisticado", podrías escribir esto otro:

Dim res2 = From n In New Integer() {1, 2, 5, 3, 6, 7, 4} _
          Where n > 3 _
          Select New With {.Valor = n, _
                           .Descripcion = "El valor del número " & n}

For Each i In res2
    Console.WriteLine("{0} = {1}", _
                      i.Descripcion, i.Valor)
Next

Listado 2. Ejemplo de LINQ y tipos anónimos

Es decir, "la consulta", en lugar de devolver un valor "simple", estás devolviendo valores "complicados".
En serio, en realidad, la variable res2, es del tipo IEnumerable(Of ???) es decir de un tipo anónimo que tiene dos propiedades, una de tipo numérico (Integer) llamada Valor y otra de tipo String llamada Descripcion.

De hecho, en el bucle la variable "i" ahora es de ese tipo "anónimo" y el compilador lo sabe, hasta el IDE de Visual Studio lo sabe y por eso el Intellisense muestra las propiedades a las que podemos acceder, tal como puedes ver en la figura 1.

Figura 1. Intellisense conoce a los tipos anónimos
Figura 1. Intellisense conoce a los tipos anónimos

Como el tipo "creado" es anónimo, no podemos definir variables de ese tipo, pero si podemos crear nuevos objetos de ese mismo tipo anónimo. Ya que el compilador de Visual Basic sabrá que queremos usar el mismo "tipo", al menos si usamos las mismas propiedades, (tanto en nombre como en tipos).

Por ejemplo, si quieres crear un objeto de ese mismo tipo anónimo, puedes hacer algo así:

Dim quien = New With {.Valor = 10, .Descripcion = "Un tipo anónimo"}

Aunque no sepamos de que tipo es, el compilador si que lo sabe, y usa el mismo que antes, en este caso, ese tipo se llama: VB$AnonymousType_0`2, pero a pesar de que "pudieras" saber cómo se llama, no podrías declarar una variable de ese tipo. Sino... ¡dejaría de ser anónimo!

¿Te imaginas las  posibilidades que tienes esto?
Pues... te quedas corto...  ¡tiene muchas más!

 


Ir al índice de las novedades de Visual Basic 2008 (VB 9.0)


Código de ejemplo (comprimido):

Para bajarte el código, hazlo desde la página principal de
Las Novedades de Visual Basic 9.0 con la CTP de Junio 2007.


 


La fecha/hora en el servidor es: 23/12/2024 17:54:49

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024