Curso de Visual Basic

Aprende Visual-Basic de una buena vez

gratis
texto

Tipos de datos primitivos en Visual Basic. Declaración y asignación de variables

Veamos en la siguiente tabla los tipos de datos definidos en .NET Framework y los alias utilizados en Visual Basic 2010, así como el equivalente de VB6 que es la versión que la mayoría han usado e incluso usan aún.

Quizá no te interese mucho conocer estas diferencias, pero bueno, seguramente habrá algún visitante a quien le sirvan e igual a nosotros nos ayudará a conocer los tipos de variables que usaremos en esta sección y sus principales diferencias.

Tipos de datos y equivalencia entre lenguajes

En la columna de equivalencias con VB6 tenemos algunos indicados con N.A., estos tipos no tienen equivalencia, por otro lado, los marcados con un asterisco (*) no tienen equivalencia directa, pero el o los tipos indicados serían los que más se aproximarían. El caso del tipo String es un caso especial, realmente un String de .NET es casi como uno de VB6, con la diferencia de que las cadenas en .NET son inmutables, es decir, una vez que se han creado no se pueden modificar y en caso de que queramos cambiar el contenido, .NET se encarga de usar la anterior y crear una nueva cadena, por tanto si usamos las cadenas para realizar concatenaciones (unión de cadenas para crear una nueva), el rendimiento es inferior al que teníamos en VB6, si bien existe una clase en .NET que es ideal para estos casos y cuyo rendimiento es, si no superior al menos parecido al de VB6: la clase StringBuilder.

Las últimas filas mostradas en la tabla son tipos especiales que si bien son parte del sistema de tipos comunes (CTS) no forman parte de la Common Language Specification (CLS), es decir la especificación común para los lenguajes "compatibles" con .NET, por tanto, si queremos crear aplicaciones que puedan interoperar con todos los lenguajes de .NET, esos tipos no debemos usarlos como valores de devolución de funciones ni como tipo de datos usado en los argumentos de las funciones, propiedades o procedimientos.

Los tipos mostrados en la tabla son los tipos primitivos de .NET y por extensión de Visual Basic 2010, es decir son tipos "elementales" para los cuales cada lenguaje define su propia palabra clave equivalente con el tipo definido en el CTS de .NET Framework. Todos estos tipos primitivos podemos usarlos tanto por medio de los tipos propios de Visual Basic, los tipos definidos en .NET o bien como literales. Por ejemplo, podemos definir un número entero literal indicándolo con el sufijo I: 12345I o bien asignándolo a un valor de tipo Integer o a un tipo Sytem.Int32 de .NET. La única excepción de los tipos mostrados en la tabla 1 es el tipo de datos Object, este es un caso especial del que nos ocuparemos en la próxima lección.

Sufijos o caracteres y símbolos identificadores para los tipos

Cuando usamos valores literales numéricos en Visual Basic 2010, el tipo de datos que le asigna el compilador es el tipo Double, por tanto si nuestra intención es indicar un tipo de datos diferente podemos indicarlos añadiendo una letra como sufijo al tipo, esto es algo que los más veteranos de VB6 ya estarán acostumbrados, e incluso los más noveles también, en Visual Basic 2010 algunos de ellos se siguen usando, pero el tipo asociado es el equivalente al de este nuevo lenguaje (tal como se muestra en la tabla), por ejemplo para indicar un valor entero podemos usar la letra I o el signo %, de igual forma, un valor de tipo entero largo (Long) lo podemos indicar usando L o &, en la siguiente tabla podemos ver los caracteres o letra que podemos usar como sufijo en un literal numérico para que el compilador lo identifique sin ningún lugar a dudas.

Sufijos para identificar los tipos de datos

El uso de estos caracteres nos puede resultar de utilidad particularmente para los tipos de datos que no se pueden convertir en un valor doble.

Por ejemplo, si queremos asignar este valor literal a un tipo Decimal: 12345678901234567890, tal como vemos en la figura de abajo, el IDE de Visual Basic 2010 nos indicará que existe un error de desbordamiento (Overflow) ya que esa cifra es muy grande para usarlo como valor Double.

Error de desbordamiento al intentar asignar un valor Double a una variable Decimal

Pero si le agregamos el sufijo D o @ ya no habrá dudas de que estamos tratando con un valor Decimal y no tendremos errores, como se puede observar en la imagen de abajo..

Error de desbordamiento al intentar asignar un valor Double a una variable Decimal Reparado

Tipos por Valor y Tipos por Referencia

Los tipos de datos de .NET los podemos definir en dos grupos:

  • Tipos por valor
  • Tipos por referencia

Los tipos por valor son tipos de datos cuyo valor se almacena en la pila o en la memoria "cercana", como los numéricos que hemos visto. Podemos decir que el acceso al valor contenido en uno de estos tipos es directo, es decir se almacena directamente en la memoria reservada para ese tipo y cualquier cambio que hagamos lo haremos directamente sobre dicho valor, de igual forma cuando copiamos valores de un tipo por valor a otro, estaremos haciendo copias independientes.

Por otro lado, los tipos por referencia se almacenan en el "monto" (heap) o memoria "lejana", a diferencia de los tipos por valor, los tipos por referencia lo único que almacenan es una referencia (o puntero) al valor asignado. Si hacemos copias de tipos por referencia, realmente lo que copiamos es la referencia propiamente dicha, pero no el contenido.

Estos dos casos los veremos en breve con más detalle.

Inferencia de tipos

Una de las características nuevas en Visual Basic 2010 es la inferencia de tipos.

Se conoce como inferencia de tipos a la característica de Visual Basic para inferir el tipo de un dato al ser inicializado.

Para que la inferencia de tipos sea efectiva, deberemos activar la opción Option Infer a True, aunque por defecto, ese es el valor que tiene el compilador de Visual Basic. Sin embargo, si se hace una migración de una aplicación de Visual Basic a Visual Basic 2010, el valor de esta opción será False.

Supongamos por lo tanto, la siguiente declaración:

Dim datoDeclarado = 2010

En este ejemplo, la variable "datoDeclarado", será una variable de tipo Integer (Int32). Si deseamos cambiar el tipo de dato a un tipo Int64 por ejemplo, el compilador nos devolverá un error. Así, el siguiente ejemplo no será válido en Visual Basic 2010 con la opción de inferencia activada:

Dim datoDeclarado = 2010 datoDeclarado = Int64.MaxValue

Ahora bien, si cambiamos el valor de Option Infer a False, el mismo ejemplo será correcto.

¿Dónde está la diferencia? En este último caso, el caso de tener desactivada la opción de inferencia, la declaración de la variable datoDeclarado nos indica que es un tipo de dato Object en su origen, y que al darle un valor Integer, ésta funciona como una variable entera. Al cambiar su valor a Long, esta variable que es de tipo Object, cambia sin problemas a valor Long.

En todo este proceso, hay un problema claro de rendimiento con acciones de boxing y unboxing que no serían necesarias si tipáramos la variable con un tipo concreto.

Eso es justamente lo que hace la opción Option Infer por nosotros. Nos permite declarar una variable con el tipo inferido, y ese tipo de datos se mantiene dentro de la aplicación, por lo que nos da la seguridad de que ese es su tipo de dato, y que ese tipo de dato no va a variar.

¡Bueno ya! Sé que esto último fue un poco aterrador, pero no creo que haya otra forma de explicarlo, descuida que estaremos bien, no prestes mucha atención a esto si quieres. No olvides dejar tus comentarios y continuemos con con la siguiente sección (variables y constantes).

La última actualización de este artículo fue hace 8 meses

Imagen descriptiva de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

Lo que dicen los estudiantes

Muchas gracias me has ayudado a quitar mis dudas de qué es For While, if y switch. Esto me ayudara también a mi tarea.

Len Garcia

Visitante del sitio ProgramarYa.com

Wuau, entendí más en una hora leyendo esto que en todo el semestre con la maestra de informática.

Valeria Sybelle

Visitante del sitio ProgramarYa.com

Buena didáctica y redacción, espero más contenidos en los siguientes capítulos.

Juan Razo Ruiz

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Muy buena presentación pedagógica, pues nos quita el miedo a la programación. Yo entiendo que ésta tiene como objetivo facilitar el manejo de procesos que serían, demasiado complejos.

Jairo Ibarbo

Visitante del sitio ProgramarYa.com

Muy detallado y claras las explicaciones. Muchas gracias!

Sr. Erick Evencio

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Hice muchos ejercicios y aquí logré comprender lo que realmente estaba haciendo. Llegó un momento en que dejó de gustarme la programación, pero con estos textos, recuperé la motivación. Buen trabajo.

Demetrio Cumplido

Visitante del sitio ProgramarYa.com

Demoramos mucho para llegar al desarrollo. Aunque la maquina virtual es necesaria son muchos videos. De ahí en fuera está muy bien

Benjamin Ortiz

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Muy bien explicado. Contenido muy actualizado.

Santiago Zuluaga

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Buenas explicaciones y temario interesante.

Leonardo Quimpos

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Habiendo visto el 100% del curso puedo decir que es muy bueno de acuerdo a lo propuesto, cumple con las expectativas.

Holmans Correa

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

¡De lo mejor! Saludos desde México, está super bien todo, claro y preciso. Lo mejor es que se usen ejemplos. ¡Mejor que algunos profesores que me han tocado!

Rodrigo Enciso

Visitante de PrograarYa.com

Estuve un semestre sin programar y me siento bastante perdida. Espero que este curso me ayude a ponerme de nuevo al corriente.

Fernanda Sanchez

Visitante del sitio ProgramarYa.com

Me parece muy bueno, el punto de la historia me gusto mucho, ya que a veces aprendemos algo y no sabemos sus origenes. FELICITACIONES hermano...

Anthony Castillo

Visitante de ProgramarYa

Estoy muy contento por haber terminado este curso. Estoy aplicando lo aprendido a mis proyectos y quedo totalmente satisfecho. Un curso 100% recomendable.

Jesus Romero

Estudiante del curso "VPS Seguro con DigitalOcean, Nginx, Letsencrypt Ubuntu 14.04"

Muy buen programador, dominas la POO como en ninguno otro curso, el uso de traits en el proyecto es una delicia.

Sergio Larracoechea

Estudiante del curso "APIs RESTful con Laravel"

Genial el ambiente que genera la pagina. Simple, rápido, fácil y al alcance de cualquiera.¡Sigan así cracks!

Fran Garassi

Visitante del sitio ProgramarYa.com

El curso es bueno, pero siempre explica demasiado rápido

E-Contact

Estudiante del curso " Aprende Laravel: Crea un Gestor de Fotos con Laravel y PHP"

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

¡Ups! {{subscriberErrorMessage}}

Si te parece bien, te enviaré, de vez en cuando, mensajes de interés sobre los temas que se tratan en sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encontrabas.

Además, puedes eliminar tu suscripción en cualquier momento.