Está en la página 1de 38

Novedades de Visual Basic 2008

También conocido como Visual Basic 9.0 (VB9)

Guillermo 'guille' Som


mensaje@elguille.info
Agenda

Novedades de Visual Basic 2008 (VB 9.0)


• Novedades de VB 9.0
• Características generales
• LINQ
• XML
Novedades de VB 9.0

Características generales
• Ensamblados amigos
• Relajación de delegados
• Varianza y contravarianza
• Agilidad del runtime
• Operador ternario
• Tipos anulables
• Métodos parciales
Novedades de VB 9.0

Ensamblados amigos
• Acceder a los tipos y demás código que están
declarados como Friend en otro ensamblado

Imports System.Runtime.CompilerServices

<Assembly: InternalsVisibleTo("Nombre_del_ensamblado_amigo, PublicKey=la clave pública")>


Novedades de VB 9.0

Relajación de delegados
• Usar tipos de datos de uno base
• Esto ya estaba en C# 2.0
• Varianza: Para el tipo devuelto e incluso no
devolver nada
• Contravarianza: Para los parámetros

Private Sub Button1_Click( _


ByVal sender As Object, _
ByVal e As Object) _
Handles Button1.Click
Novedades de VB 9.0

• En Visual Basic la relajación puede llegar al


máximo, incluso sin necesidad de usar un tipo
base

Private Sub Button2_Click() Handles Button2.Click


Novedades de VB 9.0

Agilidad del runtime


• Permite compilar sin necesidad de usar la librería
Microsoft.VisualBasic.dll
• Solo desde la línea de comandos usando:
/vbruntime[+|-]
/vbruntime:<file>
• Esto impedirá el uso de My, los Module y otras
características especiales de VB
Novedades de VB 9.0

Operador ternario
• Es el equivalente a ?: de C#
• Y es una mejora de la función IIF ya que
devuelve el mismo tipo de datos que se usa en la
evaluación

Dim s As String = _
If(10 > 5, "10 es mayor que 5", "10 no es mayor que 5")
Novedades de VB 9.0

Operador ternario
• La "función" If también permite usar dos
argumentos
• Se evalúa el primero, si es Nothing se devuelve el
segundo (devuelve Object)
• Los tipos deben ser por referencia o anulables
Dim i As Object = If(o, 123)
Novedades de VB 9.0

Tipos anulables
• Definidos directamente en el lenguaje y basados
en Nullable(Of T)
• Al igual que en C#, se indican con una
interrogación después del tipo:
Boolean?, Date?, Integer?, etc.
• Todo lo que sepas sobre Nullable es aplicable a estos
tipos, pero ya forman parte del lenguaje
Novedades de VB 9.0

Métodos parciales
• Los métodos parciales nos permiten definir
"prototipos" de métodos que después podemos
definir completamente o no
' Declaración del método parcial
Partial Private Sub prueba1()
End Sub

' Podemos llamar al método "parcial" aunque


' no se haya implementado
prueba1()
Novedades de VB 9.0

Métodos parciales
• Hay ciertas restricciones a la hora de crear este
tipo de métodos, de las que podemos destacar:
• Deben ser de tipo Sub
• Deben ser privados
• Partial solo se usará en la definición del método
parcial no en la definición final
• Los parámetros deben tener los mismos nombres
• Si no se implementan, se eliminará todo el código
que use ese método parcial
Novedades de VB 9.0

LINQ
• Descripción de LINQ
• Expresiones de consulta al estilo SQL
• Inferencia de tipos
• Tipos anónimos
• Inicializadores de objetos
• Inicializadores de arrays y colecciones (no soportado)
• Expresiones lambda
• Métodos extensores
Novedades de VB 9.0

Descripción de LINQ
• LINQ = Language Integated Query
• Es la "razón" de casi todas las novedades de VB9
• LINQ nos permite crear expresiones de
"consultas" al estilo de T-SQL:
SELECT, FROM, JOIN, WHERE, ORDER BY, etc.
Novedades de VB 9.0

Expresiones de consulta al estilo SQL


• Esas instrucciones de consultas están incluidas en
el propio lenguaje y ¡no solo sirven para trabajar
con acceso a datos!

Dim nums() As Integer = {1, 20, 5, 2, 22, 11, 4, 3}

Dim q1 = From n In nums _


Where n > 4 _
Select n

For Each i In q1
Console.WriteLine(i)
Next
Novedades de VB 9.0

Instrucciones de consultas
• Para usar con LINQ
• Es la razón de ser de la inferencia de tipos, los
tipos anónimos y la inicialización de tipos

Dim q1 = From n In nums _


Let c = n Mod 2 _
Where n > 4 _
Order By n _
Select EsPar = (c = 0), Valor = n
Novedades de VB 9.0

Instrucciones de consultas
• Intellisense nos mostrará en cada momento las
instrucciones que podemos usar
Novedades de VB 9.0

Inferencia de tipos
• El compilador asume el tipo de las variables
dependiendo del valor asignado

Dim cadena = "Hola, Mundo"


Dim entero = 10
Novedades de VB 9.0

• ¿Cómo afecta a las aplicaciones de Visual Basic la


inferencia de tipos?
• Por defecto VB no obliga a indicar los tipos
o Option Strict Off por defecto
• Si esto es un "problema", podemos indicar que siga
siendo igual de "permisivo"
• Option Infer On/Off
Novedades de VB 9.0

Tipos anónimos
• Nos permite crear tipos "al vuelo"

Dim producto = New With { _


.Nombre = "Carpeta", _
.Precio = 1.29}
Novedades de VB 9.0

Tipos anónimos
• IntelliSense "sabe" que esos tipos tienen esas
propiedades que hemos definido
Novedades de VB 9.0

Inicialización de objetos
• Aprovecha la forma de definir de los tipos
anónimos, pero usando tipos declarados

Dim c = New Colega With {.Nombre = "Guille"}


Novedades de VB 9.0

Inicialización de colecciones y arrays


• Podemos usar esa forma de instanciar los
objetos para facilitar la creación de arrays
• No es tan potente como en C#, (hay que indicar que
es un array), pero lo simula...
Dim colegas() As Colega = { _
New Colega With {.Nombre = "Pepe"}, _
New Colega With {.Correo = "aaa@bbb.com"}, _
New Colega With {.Nombre = "Juan", _
.Correo = "jjj@ccc.com"}, _
New Colega With {.Nombre = "Luisa"} _
}
Novedades de VB 9.0

Inicialización de colecciones y arrays


• VB9 no tiene la posibilidad de crear colecciones
de esta forma
• Pero se puede usar un "método" alternativo
• (sigue el código)
Novedades de VB 9.0

Inicialización de colecciones (truco)


Function CrearLista(Of T)( _
ByVal ParamArray datos() As T _
) As IEnumerable(Of T)
' Como List(Of T)
Return New List(Of T)(datos)
' Como array
Return datos.ToArray
Return datos
End Function

Dim colegas = CrearLista( _


New Colega With {.Nombre = "Pepe"}, _
New Colega With {.Correo = "aaa@bbb.com"}, _
New Colega With {.Nombre = "Juan", _
.Correo = "jjj@ccc.com"}, _
New Colega With {.Nombre = "Luisa"} _
)
Novedades de VB 9.0

Expresiones Lambda
• Funciones en línea o funciones anónimas

Dim q1 = nums.Where(Function(n As Integer) n > 4)

Dim an = Function(n As Integer) If(n Mod 2 = 0, "par", "impar")

Console.WriteLine(an(3))
Novedades de VB 9.0

Métodos extensores
• Los métodos extensores nos permiten agregar
funcionalidad a las clases existentes
• Haciendo que parezca que usamos un método
propio de esa clase
• Podemos extender cualquier tipo, ya sea de .NET
o definidos en cualquier otra librería
• El primer parámetro será del tipo que queremos
extender
Novedades de VB 9.0

• Debemos definirlos en módulos (Module)


• Hay que indicar el atributo Extension que está
definido en el espacio de nombres
System.Runtime.CompilerServices

<Extension()> _
Public Function Mayúsculas(ByVal c As Colega) As String
Return (c.Nombre & ", " & c.Correo).ToUpper
End Function
Novedades de VB 9.0

• IntelliSense muestra los métodos extensores de


forma diferente a los métodos normales
• Con una flecha
Novedades de VB 9.0

XML (XLinq)
• Literales de XML
• Miembros de XML
Novedades de VB 9.0

• La integración de XML en Visual Basic (XLinq)


• Permite incluir código XML directamente
Dim contactDoc = _
<?xml version="1.0"?>
<contacts>
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
<contact>
<name>Pedro Picapiedra</name>
<phone type="home">001-111-0144</phone>
<phone type="work">001-222-0145</phone>
</contact>
</contacts>
Novedades de VB 9.0

• Y usarlo de forma “nativa” con el resto de las


nuevas características

Dim nombres = From c In contactDoc...<contact> _


Where c.<phone>.@type = "home" _
Select c
Novedades de VB 9.0

• También podemos insertar expresiones en el


código XML al estilo de ASP.NET
Dim elNombre = "Juan Luna"
Dim telef1 = "666 777 999"
Dim telef2 = "901 901 901"

Dim contact1 As XElement = _


<contact>
<name><%= elNombre %></name>
<phone type="home"><%= telef1 %></phone>
<phone type="work"><%= telef2 %></phone>
</contact>
Novedades de VB 9.0

• La instrucción Imports también permite importar


espacios de nombres de XML

Imports <xmlns:ns1="http://SomeNamespace">
Novedades de Visual Basic 2008

Mejoras de IntelliSense
• Reconoce automáticamente todas las novedades
del lenguaje
• Al igual que en Visual C# 2005, en el IDE de
Visual Basic 2008 se muestran las instrucciones
"desde el principio"
• Ha perdido un poco la "gracia" que tenía antes, pero...
las mejoras valen la pena con respecto a lo que se
pierde... por ejemplo, al asignar un valor a un
Boolean
Ya puedes conseguir
un libro sobre todas
las Novedades de
Visual Basic 2008
en formato PDF

http://www.elguille.info/NET/NovedadesVB9
Nuevo libro en preparación

Si te gustan los puntos y comas... tu libro es:

Aprenda C# 3.0 desde 0.0


Parte 3: Lo nuevo

http://www.elguille.info/NET/AprendaCSharp3
Novedades de VB 9.0

Guillermo ‘guille’ Som


mensaje@elguille.info
http://www.elguille.info/