Introducción:
En el PDC 2008 celebrado hace unos días, se ha presentado la primera "preview"
de Visual Studio 10 (o Visual Studio 2010) y aquí te muestro algunas de las
primeras pruebas que he hecho, principalmente "probando" algunas de las
novedades que traerá la próxima versión de Visual Basic.
El problema con este tipo de "pruebas" es que no hay
documentación y las pruebas hay que hacerlas a "ojo", es decir,
intentando averiguar lo que se supone que hay de nuevo... Aclaro
este punto, porque algunos piensan que los que tenemos acceso a
este tipo de betas (o alfas, ya que esta primera versión ni
siquiera se considera una beta), también tenemos acceso a las
cosas que se supone que se incluyen como novedades, pero no...
no suele ser así, y algunas de esas novedades te las tienes que
imaginar o como mucho, probar con las cosas que el equipo de
desarrollo ha ido publicando en sus blogs.
No me enrollo más, y te dejo algunas de las cosas que han
cambiado en el IDE de Visual Studio y las cosas que he probado
con referencia a las novedades de Visual Basic 10 (VB10).
Estos son los links a las distintas pruebas:
Por cierto... el logo de .NET ha cambiado... y ahora es como el mostrado arriba de esta página...
Si quieres bajarte la CTP de Visual Studio 2010 y .NET Framework 4.0, pulsa en este link:
http://go.microsoft.com/fwlink/?LinkId=131310
Y si quieres ver más información o dar soporte a esta "preview" de Visual Studio 2010, pulsa en este link:
http://go.microsoft.com/fwlink/?LinkId=129231
La primera impresión cuando abres el Visual Studio 2010 (o Visual Studio 10)
es que han cambiado la página de inicio (Start Page), ahora utiliza WPF, con lo
que se mejora el "look" de esa página de inicio.
En la figura 1 tienes una de las tres partes de esta página de inicio.
En la figura 2 tienes la parte que agrupa la creación de nuevos proyectos o el
acceso a los proyectos existentes. Entre los cambios que hay, puedes ver que
ahora es fácil de eliminar proyectos de esa lista, no se pueden reordenar, pero
es posible que lo agreguen en futuras revisiones.
Figura 1.
Página de inicio de Visual Studio 2010
Figura 2.
La sección para los proyectos de Visual Studio 2010
El IDE de Visual Studio 10 permite seleccionar o resaltar las clases y tipos que tenemos seleccionado.
Por ejemplo, en la figura 3, tengo seleccionada la variable nums y en el editor
se resaltan todas las veces que aparece esa variable.
Figura 3. Resaltado de la variable seleccionada
A continuación te muestro las novedades de Visual Basic 10 que he probado:
Ahora no es necesario usar el continuador de líneas para escribir el código
en varias líneas físicas.
Al menos en la mayoría de situaciones, aunque aún hay algunas cosillas que si no
se usa el continuador de líneas, es posible que el compilador se líe y no nos
permita usarlas.
Por ejemplo, puedes cambiar de línea (sin usar el continuador) después de un
operador, después de una coma o un punto y cuando escribes consultas de LINQ o
expresiones lambda multilíneas.
En los siguientes ejemplos puedes comprobar que no es necesario usar ese
continuador para dividir el código en varias líneas físicas.
Si se usan operadores, se puede partir el código sin usar
continuador de líneas:
Dim i1 = 10 + 5
Dim i2 = 10 +
5
En ciertos casos, como este, se puede cambiar de línea sin usar el
continuador:
Console.WriteLine("i1 = {0}, i2 = {1}",
i1, i2)
Donde más se echaba en falta era en la asignación de cadenas:
Dim s = "Hola mundo" &
vbCrLf &
"Segunda línea"
También es muy útil cuando se escriben consultas de LINQ:
Dim q1 = From n In nums
Where n > 4
Select Valor = n,
Espar = (n Mod 2) = 0
Incluso cuando se escriben consultas de LINQ usando los métodos extensores:
Dim q2 = nums.
Where(Function(n) n > 4).
OrderByDescending(Function(n) n)
En los bucles, hay situaciones en las que debemos usar el continuador de líneas:
For i = 0 To _
nums2.Length - 1
Console.WriteLine(i)
Next
Pero solamente si el compilador no se aclara, ya que en otros casos, si se pueden usar:
For i = 0 To nums2.
Length - 1
Console.WriteLine(i)
Next
Como vemos a continuación, tenemos muchas opciones en las que no es necesario el continuador de líneas:
For Each n In nums2.
OrderByDescending(
Function(n1) n1)
Console.WriteLine(n)
Next
Y como veremos más abajo, también es muy útil cuando escribimos código que definen colecciones, arrays o expresiones lambda
, sobre todo cuando son de varias líneas.
Las propiedades autoimplementadas nos permiten definir de forma muy simple
las propiedades que no deben ejecutar código personalizado en los bloques Set o
Get.
Se permite asignar un valor inicial (como se hace con las
variables normales), incluso a colecciones o arrays.
En el siguiente trozo de código, puedes ver un par de
ejemplos de propiedades autoimplementadas, lo que no se permite
es crear este tipo de propiedades con ámbitos diferentes para
cada bloque de código (bloque Get o bloque Set) o propiedades
que sean de solo lectura o solo escritura.
Class Colega
' Propiedades autoimplementadas "normales"
Public Property Nombre As String
Public Property Correo As String
' Con un valor inicial
Public Property ID As String = "0001"
' Una propiedad de tipo colección
' con valores iniciales
Public Property Valores As New List(Of Integer) From {1, 2, 3, 4, 5}
End Class
Ahora se pueden iniciar los arrays sin necesidad de indicar que es un array...
En este primer ejemplo, se define un array de tipo Integer de
la forma "tradicional"
Dim nums1() As Integer = {1, 2, 3, 4, 5, 6}
Esta es la forma de definir un array de forma "simple":
Dim nums = {1, 2, 4, 3, 5, 7, 6, 9, 8}
Incluso se puede cortar en varias líneas para que resulte más fácil de leer,
por ejemplo cuando se usa la inicialización de objetos:
Dim colegas = {
New Colega With {.Nombre = "Guille"},
New Colega With {.Nombre = "Pepe"}
}
En esta versión de Visual Basic, también se pueden inicializar las
colecciones, aunque tiene un poco de "truco", ya que se debe usar la instrucción
From para indicar los valores que se asignarán a la colección:
En este primer ejemplo vemos cómo crear una lista de tipo List(Of Integer):
Dim colNums As New List(Of Integer) From {1, 2, 3, 4, 5, 6}
En este otro inicializamos una colección de tipo Dictionary:
Dim colDic As New Dictionary(Of Integer, String) From {
{1, "Uno"},
{2, "Dos"},
{3, "Tres"}
}
En este ejemplo, inicializamos una colección de tipo List(Of Colega):
Dim colegas2 As New List(Of Colega) From {
c1,
New Colega With {.Nombre = "Pepe"},
New Colega With {.Nombre = "Guille"}
}
Por supuesto, no hace falta indicar las cosas en líneas diferentes:
Dim col2 As New List(Of Colega) From {c1, New Colega With {.Nombre = "Pepe"}}
En Visual Basic 9 (o Visual Basic 2008) solo se podían definir expresiones
lambda (o funciones en línea) usando Function y en esa función solo se permitía
una instrucción.
En Visual Basic 10 (VB10), si esa expresión lambda no devolverá un valor, se
puede usar Sub en lugar de Function, pero lo más interesante es que se pueden
escribir expresiones lambda con más de una instrucción (es decir, una expresión
lambda multilínea).
En los siguientes apartados puedes ver ejemplos de esto que comento:
En este ejemplo asignamos un método para interceptar un evento:
AddHandler Button1.Click,
Sub() MessageBox.Show("Hola (2) " & TextBox1.Text)
En este ejemplo, vemos algo parecido al anterior, pero usando una expresión lambda multilínea.
En este caso, al ser de tipo Sub, se debe indicar End Sub como final:
AddHandler Button1.Click,
Sub()
Label2.Text = "(Sub) Hola " & TextBox1.Text
End Sub
En este ejemplo, al usar Function, se debe acabar el bloque de código con End Function y debe devolver algo...
aunque sea nada:
AddHandler Button1.Click,
Function()
Label2.Text = "(Function) Hola " & TextBox1.Text
Return Nothing
End Function
En este ejemplo, se usa una expresión lambda de tipo Function multilínea:
Dim v1 = CInt(TextBox2.Text)
Dim v2 = CInt(TextBox3.Text)
Dim r = Function(x1 As Integer, x2 As Integer)
Dim v = x1 + x2
Return String.Format("{0} + {1} = {2}", x1, x2, v)
End Function
Label3.Text = r(v1, v2)
Es importante tener en cuenta que si se escriben expresiones lambda multilíneas de tipo Function,
siempre debe indicarse la instrucción Return con el valor que esa función debe devolver.
Y esto es todo por ahora... en cuanto haga más pruebas, te iré contando.
Espero que te sea de utilidad.
Nos vemos.
Guillermo