‒ Arreglos abiertos Variant.
Cuando se usa el modo objfpc, free pascal soporta en las rutinas y métodos, parámetros arreglos abiertos variant, que en ingles sería: “variant open array parameters”.
Este es un caso especial de arreglos abiertos, donde este permite colocar cualquier elemento en un arreglo y pasarlo a un método o rutina. Los elementos deben ser tipos de datos enteros, booleanos, caracteres, Enumerados, subrangos, Reales, cadena de caracteres, punteros, clases y objetos.
Los elementos de un parámetro arreglo abierto variant, están asociados a un registro que nos permite obtener el valor colocado en el parámetro. Es decir un elemento de un parámetro arreglo abierto variant es un registro, en donde un campo nos permite identificar su tipo y el otro obtener el valor correspondiente. El campo vtType nos permitirá saber cual es el tipo de dato colocado en el arreglo, el cual debemos comparar con uno de las siguientes contantes:
Identificador | Uso |
vtInteger | Para un tipo de dato integer. |
vtBoolean | Para un tipo de dato Boolean. |
vtChar | Para un tipo de dato Char. |
vtWideChar | Para un tipo de dato WideChar. |
vtExtended | Para un tipo de dato Eextended. |
vtString | Para un tipo de dato String. |
vtPointer | Para un puntero. |
vtPChar | Para un tipo de dato PChar. |
vtObject | Para un Objeto. |
vtClass | Para una Clase. |
vtPWideChar | Para un tipo de dato PWideChar. |
vtAnsiString | Para un tipo de dato AnsiString. |
vtCurrency | Para un tipo de dato Currency. |
vtInt64 | Para un tipo de dato Int64. |
vtQWord | Para un tipo de dato QWord. |
Es decir si queremos saber si el elemento 3 de una lista X de elementos, tiene el tipo de dato entero, entonces usaremos lo siguiente:
if X[3].vtype=vtInteger then Writeln('Es un Entero')
Para obtener el valor colocado en un elemento se debe usar uno de los siguiente campos, según sea el caso:
Campos | Uso |
vInteger | Para un tipo de dato integer. |
vBoolean | Para un tipo de dato Boolean. |
vChar | Para un tipo de dato Char. |
vWideChar | Para un tipo de dato WideChar. |
vExtended | Para un tipo de dato Eextended, se debe usar un circunflejo, ya que este es campo es un puntero de tipo Extended. |
vString | Para un tipo de dato String, igual se debe usar un circunflejo, ya que el campo es un puntero al tipo de dato String. |
vPointer | Para un puntero. |
vPChar | Para un tipo de dato PChar. |
vObject | Para un Objeto. |
vClass | Para una Clase. |
vPWideChar | Para un tipo de dato PWideChar. |
vAnsiString | Para un tipo de dato AnsiString. |
vCurrency | Para un tipo de dato Currency, también se debe usar circunflejo. |
vInt64 | Para un tipo de dato Int64, también se debe usar circunflejo. |
vQWord | Para un tipo de dato QWord, también se debe usar circunflejo. |
Los parámetros arreglos abiertos variant, son útiles cuando no se sabe de antemano que es lo que se va a colocar en el arreglo. El siguiente programa es un ejemplo de como se podría, usar este tipo de parámetros: