Tipos de Datos
Las variables son marcadores de posición que se utilizan para almacenar valores; tienen nombre y un tipo de dato. El tipo de dato de la variable determina cómo se almacenan los bits que representan esos valores en la memoria del equipo. Cuando declare una variable, también puede proporcionarle un tipo de dato. Todas las variables tienen un tipo de dato que determina la clase de datos que pueden almacenar.
De forma predeterminada, si no proporciona un tipo de dato, la variable toma el tipo de dato
Variant. El tipo de dato
Variant es como un camaleón; puede representar diferentes tipos de datos en distintas situaciones. No tiene que convertir estos tipos de datos cuando los asigne a una variable
Variant: Visual Basic realiza automáticamente cualquier conversión necesaria.
Sin embargo, si sabe que una variable almacenará siempre un tipo de dato determinado, Visual Basic tratará de forma más eficiente los datos si declara la variable con ese tipo. Por ejemplo, se representa mejor una variable que va almacenar nombres de personas como el tipo de dato
String, ya que un nombre está siempre compuesto de caracteres.
Los tipos de datos se aplican a otras cosas además de a las variables. Cuando asigna un valor a una propiedad, dicho valor tiene un tipo de dato; los argumentos de las funciones tienen también tipos de datos. De hecho, todo lo relacionado con datos en Visual Basic tiene un tipo de dato.
También puede declarar matrices de cualquiera de los tipos fundamentales.
Declarar variables con tipos de datosAntes de usar una variable que no sea
Variant debe usar las instrucciones
Private,
Public,
Dim o
Static para declararla
As tipo. Por ejemplo, la siguiente instrucción declara un tipo
Integer,
Double,
String y
Currency, respectivamente:
Private I As Integer
Dim Cantidad As Double
Static SuNombre As String
Public PagadoPorJuan As Currency
La instrucción de declaración puede combinar varias declaraciones, como en las instrucciones siguientes:
Private I As Integer, Amt As Double
Private SuNombre As String, PagadoPorJuan As Currency
Private Prueba, Cantidad, J As Integer
Nota: Si no proporciona un tipo de dato, se asigna a la variable el tipo predeterminado. En el ejemplo anterior, las variables
Prueba y
Cantidad tienen un tipo de dato
Variant. Esto puede sorprenderle si su experiencia con otros lenguajes de programación le lleva a esperar que todas las variables contenidas en la misma instrucción de declaración tengan el mismo tipo que ha especificado (en este caso,
Integer).
Tipos de datos numéricosVisual Basic proporciona varios tipos de datos numéricos:
Integer,
Long (entero largo),
Single (signo flotante de simple precisión),
Double (signo flotante de doble precisión) y
Currency. Usar un tipo de dato numérico emplea normalmente menos espacio de almacenamiento que un tipo
Variant.
Si sabe que una variable siempre va a almacenar números enteros (como 12) en vez de números fraccionarios (como 3,57), declárela como un tipo
Integer o
Long. Las operaciones con enteros son más rápidas y estos tipos consumen menos memoria que otros tipos de datos. Resultan especialmente útiles como variables de contador en bucles
For...Next.
Si la variable contiene una fracción, declárela como variable
Single,
Double o
Currency. El tipo de dato
Currency acepta hasta cuatro dígitos a la derecha del separador decimal y hasta quince dígitos a la izquierda; es un tipo de dato de signo fijo adecuado para cálculos monetarios. Los números de signo flotante (
Single y
Double) tienen más intervalo que
Currency, pero pueden estar sujetos a pequeños errores de redondeo.
Nota: Los valores de signo flotante se pueden expresar como
mmmEeee o
mmmDeee, donde
mmm es la mantisa y
eee el exponente (potencia de 10). El valor positivo más alto de un tipo de dato
Single es 3,402823E+38 ó 3,4 veces 10 a la 38
a potencia; el valor positivo más alto de un tipo de dato
Double es 1,79769313486232D+308 o alrededor de 1,8 veces 10 a la 308
a potencia. Si utiliza
D para separar la mantisa y el exponente en un literal numérico, el valor se tratará como un tipo de dato
Double. Igualmente, usar
E de la misma manera hace que el valor se trate como un tipo de dato
Single.
El tipo de dato ByteSi la variable contiene datos binarios, declárela como matriz de tipo
Byte. (Las matrices se describen en "Matrices", más adelante en este mismo capítulo). Usar variables
Byte para almacenar datos binarios los preserva durante las conversiones de formato. Cuando se convierten las variables
String entre los formatos ANSI y Unicode, los datos binarios de la variable resultan dañados. Visual Basic puede convertir automáticamente entre ANSI y Unicode al:
- Leer archivos
- Escribir archivos
- Llamar a archivos DLL
- Llamar a métodos y propiedades en objetos
Todos los operadores que funcionan con enteros funcionan con el tipo de dato
Byte excepto el de resta unaria. Puesto que
Byte es un tipo sin signo con el intervalo 0-255, no puede representar un valor negativo. Así, para la resta unaria, Visual Basic convierte antes el tipo
Byte en un entero con signo.
Es posible asignar todas las variables numéricas entre sí y a variables del tipo
Variant. Visual Basic redondea en vez de truncar la parte fraccionaria de un número de signo flotante antes de asignarlo a un entero.
El tipo de dato StringSi tiene una variable que siempre contendrá una cadena y nunca un valor numérico, puede declararla del tipo
String:
Private S As String
Así podrá asignar cadenas a esta variable y manipularla mediante funciones de cadena:
S = "Base de datos"
S = Left(S, 4)
De forma predeterminada, una variable o argumento de cadena es una
cadena de longitud variable; la cadena crece o disminuye según le asigne nuevos datos. También puede declarar cadenas de longitud fija. Especifique una
cadena de longitud fija con esta sintaxis:
String * tamañoPor ejemplo, para declarar una cadena que tiene siempre 50 caracteres de longitud, utilice un código como este:
Dim NombreEmp As String * 50
Si asigna una cadena con menos de 50 caracteres,
NombreEmp se rellenará con espacios en blanco hasta el total de 50 caracteres. Si asigna una cadena demasiado larga a una cadena de longitud fija, Visual Basic simplemente truncará los caracteres.
Puesto que las cadenas de longitud fija se rellenan con espacios al final, verá que las funciones
Trim y
RTrim, que quitan los espacios en blanco, resultan muy útiles cuando se trabaja con ellas.
Las cadenas de longitud fija se pueden declarar en módulos estándar como
Public o
Private. En módulos de clase y formulario, las cadenas de longitud fija deben declararse como
Private.
Intercambiar cadenas y númerosPuede asignar una cadena a una variable numérica si la cadena representa un valor numérico. También es posible asignar un valor numérico a una variable de cadena. Por ejemplo, coloque un botón de comando, un cuadro de texto y un cuadro de lista en un formulario. Escriba el código siguiente en el evento Click del botón de comando. Ejecute la aplicación y haga clic en el botón de comando.
Private Sub Command1_Click()
Dim intX As Integer
Dim strY As String
strY = "100.23"
intX = strY ' Pasa la cadena a una variable numérica.
List1.AddItem Cos(strY) ' Agrega el coseno del número de la
' cadena al cuadro de lista.
strY = Cos(strY) ' Pasa el coseno a la variable de cadena.
Text1.Text = strY ' Se imprime la variable de cadena en el
' cuadro de texto.
End Sub
Visual Basic convertirá automáticamente las variables al tipo de dato apropiado. Debe tener cuidado cuando intercambie números y cadenas, ya que pasar un valor no numérico a una cadena producirá un error de tiempo de ejecución.
El tipo de dato BooleanSi tiene una variable que siempre contendrá solamente información del tipo verdadero y falso, sí y no o activado o desactivado, puede declararla del tipo
Boolean. El valor predeterminado de
Boolean es
False. En el siguiente ejemplo,
blnEjecutando es una variable
Boolean que almacena un simple sí o no.
Dim blnEjecutando As Boolean
' Comprueba si la cinta está en marcha.
If Recorder.Direction = 1 Then
blnEjecutando = True
End if
El tipo de dato DateLos valores de fecha y hora pueden almacenarse en el tipo de dato específico
Date en variables
Variant. En ambos tipos se aplican las mismas características generales a las fechas.
Cuando se convierten otros tipos de datos numéricos en
Date, los valores que hay a la izquierda del signo decimal representan la información de fecha, mientras que los valores que hay a la derecha del signo decimal representan la hora. Medianoche es 0 y mediodía es 0.5. Los números enteros negativos representan fechas anteriores al 30 de diciembre de 1899.
El tipo de dato ObjectLas variables
Object se almacenan como direcciones de 32 bits (4 bytes) que hacen referencia a objetos dentro de una aplicación o de cualquier otra aplicación. Una variable declarada como
Object es una variable que puede asignarse subsiguientemente (mediante la instrucción
Set) para referirse a cualquier objeto real reconocido por la aplicación.
Dim objDb As Object
Set objDb = OpenDatabase("c:\Vb5\biblio.mdb")
Cuando declare variables de objeto, intente usar clases específicas (como
TextBox en vez de
Control o, en el caso anterior,
Database en vez de
Object) mejor que el tipo genérico
Object. Visual Basic puede resolver referencias a las propiedades y métodos de objetos con tipos específicos antes de que ejecute una aplicación. Esto permite a la aplicación funcionar más rápido en tiempo de ejecución. En el Examinador de objetos se muestran las clases específicas.
Cuando trabaje con objetos de otras aplicaciones, en vez de usar
Variant o el tipo genérico
Object, declare los objetos como se muestran en la lista
Clases en el Examinador de objetos. Esto asegura que Visual Basic reconozca el tipo específico de objeto al que está haciendo referencia, lo que permite resolver la referencia en tiempo de ejecución.
Convertir tipos de datosVisual Basic proporciona varias funciones de conversión que puede usar para convertir valores en tipos de datos específicos. Por ejemplo, para convertir un valor a
Currency, utilice la función
CCur:
PagoPorSemana = CCur(horas * PagoPorHora)
| Funciones de conversión | Convierten una expresión en |
| Cbool | Boolean |
| Cbyte | Byte |
| Ccur | Currency |
| Cdate | Date |
| CDbl | Double |
| Cint | Integer |
| CLng | Long |
| CSng | Single |
| CStr | String |
| Cvar | Variant |
| CVErr | Error |
Nota: Los valores que se pasan a una función de conversión deben ser válidos para el tipo de dato de destino o se producirá un error. Por ejemplo, si intenta convertir un tipo
Long en un
Integer, el tipo
Long debe estar en el intervalo válido del tipo de dato
Integer.
Para obtener más información Busque las funciones específicas de conversión en la
Referencia del lenguaje.
El tipo de dato VariantUna variable
Variant es capaz de almacenar todos los tipos de datos definidos en el sistema. No tiene que convertir entre esos tipos de datos si los asigna a una variable
Variant; Visual Basic realiza automáticamente cualquier conversión necesaria. Por ejemplo:
Dim AlgúnValor ' De forma predeterminada es un tipo Variant.
AlgúnValor = "17" ' AlgúnValor contiene "17" (cadena de dos
' caracteres).
AlgúnValor = AlgúnValor - 15 ' AlgúnValor ahora contiene
' el valor numérico 2.
AlgúnValor = "U" & AlgúnValor ' AlgúnValor ahora contiene
' "U2" (una cadena de dos
' caracteres).
Si bien puede realizar operaciones con variables
Variant sin saber exactamente el tipo de dato que contienen, hay algunas trampas que debe evitar.
- Si realiza operaciones aritméticas o funciones sobre un Variant, el Variant debe contener un número.
- Si está concatenando cadenas, utilice el operador & en vez del operador +. Para obtener más detalles, vea la sección "Cadenas almacenadas en tipos Variant" en "Temas avanzados sobre Variant".
Además de poder actuar como otros tipos de datos estándar, los
Variant también pueden contener tres valores especiales:
Empty,
Null y
Error.
El valor EmptyA veces necesitará saber si se ha asignado un valor a una variable existente. Una variable
Variant tiene el valor
Empty antes de asignarle un valor. El valor
Empty es un valor especial distinto de 0, una cadena de longitud cero (
"") o el valor
Null. Puede probar el valor
Empty con la función
IsEmpty:
If IsEmpty(Z) Then Z = 0
Cuando un
Variant contiene el valor
Empty, puede usarlo en expresiones; se trata como un 0 o una cadena de longitud cero, dependiendo de la expresión.
El valor
Empty desaparece tan pronto como se asigna cualquier valor (incluyendo 0, una cadena de longitud cero o
Null) a una variable
Variant. Puede establecer una variable
Variant de nuevo como
Empty si asigna la palabra clave
Empty al
Variant.
El valor NullEl tipo de dato
Variant puede contener otro valor especial:
Null.
Null se utiliza comúnmente en aplicaciones de bases de datos para indicar datos desconocidos o que faltan. Debido a la forma en que se utiliza en las bases de datos,
Null tiene algunas características únicas:
- Las expresiones que utilizan Null dan como resultado siempre un Null. Así, se dice que Null se "propaga" a través de expresiones; si cualquier parte de la expresión da como resultado un Null, la expresión entera tiene el valor Null.
- Al pasar un Null, un Variant que contenga un Null o una expresión que dé como resultado un Null como argumento de la mayoría de las funciones hace que la función devuelva un Null.
- Los valores Null se propagan a través de funciones intrínsecas que devuelven tipos de datos Variant.
También puede asignar un
Null mediante la palabra clave
Null:
Z = Null
Puede usar la función
IsNull para probar si una variable
Variant contiene un
Null:
If IsNull(X) And IsNull(Y) Then
Z = Null
Else
Z = 0
End If
Si asigna
Null a una variable de un tipo que no sea
Variant, se producirá un error interceptable. Asignar
Null a una variable
Variant no provoca ningún error y el
Null se propagará a través de expresiones que contengan variables
Variant (
Null no se propaga a través de determinadas funciones). Puede devolver
Null desde cualquier procedimiento
Function con un valor de devolución de tipo
Variant.
Null no se asigna a las variables a menos que se haga explícitamente, por lo que si no utiliza
Null en su aplicación, no tendrá que escribir código que compruebe su existencia y lo trate.
El valor ErrorEn un
Variant,
Error es un valor especial que se utiliza para indicar que se ha producido una condición de error en un procedimiento. Sin embargo, a diferencia de otros tipos de error, no se produce el tratamiento de errores a nivel normal de aplicación. Esto le permite a usted o a la propia aplicación elegir alternativas basadas en el valor del error. Los valores de error se crean convirtiendo números reales en valores de error mediante la función
CVErr.