Variables locales implicítamente tipadas en VB.NET 9

Visual
Basic .NET 9.0, disponible con Visual Studio 2008, incluye, al igual
que C# 3.0, multitud de novedades y mejoras que sin duda nos harán la
vida más fácil.

Una de ellas es la posibilidad de declarar
variables sin necesidad de indicar de forma explícita su tipo, cediendo
al compilador la tarea de determinar cuál es en función del tipo de
dato obtenido al evaluar su expresión de inicialización. El tipado
implícito o inferencia de tipos también existe en C# y ya escribí sobre ello hace unos días, pero me parecía interesante también publicar la visión para el programador Visual Basic y las particularidades que presenta.

Gracias a esta nueva característica, en lugar de escribir:

  Dim x As XmlDateTimeSerializationMode = XmlDateTimeSerializationMode.Local
Dim i As Integer = 1
Dim d As Double = 1.8

podremos utilizar:

  Dim x = XmlDateTimeSerializationMode.Local
Dim i = 1
Dim d = 1.8

El
resultado en ambos casos será idéntico, ganando en comodidad y
eficiencia a la hora de la codificación y sin sacrificar los beneficios
propios del tipado fuerte.

Hay un detalle importante que los
veteranos habrán observado: Visual Basic ya permitía (y de hecho
permite) la declaración de variables sin especificar el tipo, de la
forma Dim i = 1 (con Option Strict Off), por
lo que podría parecer que el tipado implícito no sería necesario. Sin
embargo, en este caso los compiladores asumían que la variable era de
tipo Object, por lo que nos veíamos obligados a realizar
castings o conversiones en tiempo de ejecución, penalizando el
rendimiento y aumentando el riesgo de aparición de errores imposibles
de detectar en compilación. Tampoco tiene nada que ver con tipados
dinámicos (como los presentes en javascript), o con el famoso tipo Variant
que estaba presente en Visual Basic 6; el tipo asignado a la variable
es fijo e inamovible, como si lo hubiésemos declarado explícitamente.

En Visual Basic 9, siempre que no se desactive esta característica incluyendo la directiva Option Infer Off
en el código, el tipo de la variable será fijado justo en el momento de
su declaración, deduciéndolo a partir del tipo devuelto por la
expresión de inicialización. Por este motivo, la declaración y la
inicialización deberán hacerse en el mismo momento:


Dim i = 1 ' La variable "i" es Integer desde este momento

Dim j ' La variable "j" es Object, como siempre,
j = 1 ' ... si Option Scrict está en Off.
' En caso contrario aparecerá un error de compilación.

 

El tipado implícito puede ser asimismo utilizado en las variables de control de bucles For o For Each, haciendo su escritura mucho más cómoda:

 
Dim suma = 0
For i = 1 To 10 ' i se está declarando ahí mismo como Integer,
suma += i ' no existía con anterioridad
Next

Dim str = "abcdefg"
For Each ch In str ' ch se declara automáticamente como char,
Console.Write(ch) ' que es el tipo de los elementos de "str"
Next

 
Y
también puede resultar bastante útil a la hora de obtener objetos de
tipos anónimos, es decir, aquellos cuya clase se define en el mismo
momento de su instanciación, como en el siguiente ejemplo:


Dim point = New With {.X = 1, .Y = 5}
point.X += 1
point.Y += 1

 

Por
último, es interesante comentar que, a diferencia de C#, Visual Basic
permite declarar en la misma línea distintas variables de tipo
implícito, por lo que es posible escribir Dim k=1, j=4.8, str="Hola"
sin temor a un error en compilación, asignándose a cada una de ellas el
tipo apropiado en función de su inicialización (en el ejemplo, Integer, Double y String respectivamente).

Coinciden,
sin embargo, en que en ambos lenguajes esta forma de declaración de
variables se aplica exclusivamente a las locales, es decir, aquellas
cuyo ámbito es un método, función o bloque de código. No pueden ser
propiedades ni variables de instancia; en el siguiente ejemplo, x será declarada de forma implícita como Object, mientras que el tipo de la variable y será inferido como Integer:

  Public Class Class1
Dim x = 2 ' Es una variable de instancia
Public Sub New()
Dim y = 2 ' Es una variable local
End Sub
End Class

 
En
resumen, se trata de una característica muy útil que, además de
permitirnos programar más rápidamente al ahorrarnos teclear los tipos
de las variables locales, actúa como soporte de nuevas características
del lenguaje y la plataforma .NET, como el interesantísimo Linq.

Es
conveniente, sin embargo, utilizar esta característica con cordura y
siendo siempre conscientes de que su uso puede dar lugar a un código
menos legible y generar errores difíciles de depurar. De hecho,
Microsoft recomienda usarlas «sólo cuando sea conveniente».

Publicado en: Variable Not Found.

Un comentario sobre “Variables locales implicítamente tipadas en VB.NET 9”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *