Tipo variante

En ciencias de la computación variante es un tipo de dato utilizados por ciertos lenguajes de programación, particularmente en Visual Basic, OCaml, y C++ cuando se usa el Component Object Model.

Información

En Visual Basic (y Visual Basic para Aplicaciones) el tipo de dato variante es una unión etiquetada que puede ser usada para representar todos los otros tipos de datos (por ejemplo, Entero, Flotante, Doble, Etc.) excepto con tipos cadena de longitud fija y tipos de datos Record. En Visual Basic toda variable no declarada explícitamente o cuyo tipo no es declarado explícitamente, es tomado como una variante.

Si bien no se recomienda el uso de variantes no declarados explícitamente, pueden ser de utilidad cuando el tipo de datos necesarios sólo puede ser conocido en tiempo de ejecución, cuando se espera que el tipo de datos puedan variar, o cuando se desean parámetros opcionales y matrices de parámetros. De hecho, los lenguajes con un sistema de tipo dinámico a menudo tienen variante como el único tipo de dato disponible para variables.

Aunque notoriamente carente de eficiencia, las variantes se usan comúnmente como parámetros para objetos COM debido a su flexibilidad. Usted puede pensar en una variante como una especie de contenedor, que puede contener una variable de cualquier tipo de datos, numéricos, de cadena, o incluso todo un arsenal. Esto simplifica el proceso de llamar a procedimientos en un COM Object Server, ya que hay poca necesidad de preocuparse por la gran cantidad de tipos de datos posibles para cada parámetro.

Formato

Una variable de tipo variante, llamada "Variant" en inglés como se denomina en Visual Basic, necesita 16 bytes de almacenamiento y su distribución es la siguiente.

Nombre Offset Tamaño Descripción
iType 0 2 El valor retornado por VarType; especifica qué tipo de datos contiene la variante.
reserved 2 6 Bytes reservados; debe ser cero.
lLen 8 Arriba de 8 Puntero a la dirección que contiene los datos.

Tipos

Unos pocos ejemplos de variantes que uno puede encontrar en el seguimiento de Visual Basic, En otros idiomas otros tipos de variantes se pueden utilizar también.

Tipo de variable Bytes de datos Tipos C/C++ Nombre de tipo
0 Empty1
1 Null2
10 2A000A80 HRESULT (long int) Error
10 80020004 HRESULT (long int) Missing3
17 2A BYTE (unsigned char) Byte
11 FFFF VARIANT_BOOL (short int) Boolean
2 2A00 short int Integer
3 2A000000 long int Long
4 00002842 float Single
5 0000000000004540 double Double
6 A068060000000000 CY structure Currency
7 00000000C0D5E140 DATE (double) Date
8 xxxxxxxx BSTR (wchar_t pointer) String
9 00000000 IUnknown pointer Nothing4
9 xxxxxxxx IUnknown pointer Object reference5

Tipo variante en distintos lenguajes

Visual Basic

En el lenguaje Visual Basic el tipo de dato variante es manejado internamente por el compilador, por lo que no es necesario insertar los datos correspondientes (y requeridos) en el tipo de dato variante, tampoco es necesario declarar explícitamente el tipo de dato en el que se trabajará.

 Dim Variante as Variant
 Dim Variante2
 Variante2 = 666
 Variante = 999 ' Cualquier valor!

Pauscal

En el lenguaje de programación Pauscal el tipo de dato variante solo puede ser utilizado de forma explícita, a diferencia de Visual Basic el compilador de Pauscal no hace "el trabajo sucio" por el programador, por lo que es necesario trabajarlo.

' Declaramos el tipo de dato variant.
Estruc Variant,_          ' Estructura Variant.
       iType:Word,_       ' El tipo de dato.
       Reserved:Entero,_  ' Reservado, debe ser cero.
       iLen:Entero        ' Puntero al dato.
' Fin de la declaración.

Var Variante:Variant
Variante.iType = 8 ' Tipo de dato cadena.
Variante.iLen = CadPtr("Hola que tal!") ' Establecemos el puntero a la cadena "Hola que tal!".

Delphi

En Delphi una variable de tipo variante se declara de la siguiente manera:

 var A:variant;

Referencias

PowerBasic tipo de dato variante