Saltar para o conteúdo principal
Versão: 20 R5 BETA

Diferente de

Variante é um tipo de variável que permite encapsular dados de qualquer tipo regular válido numa variável. Normalmente, este tipo de variável pode ser utilizado para escrever código genérico que devolve ou recebe valores para os quais o tipo não é conhecido. É o caso, por exemplo, do código que trata os atributos dos objectos.

Uma variável de tipo variante pode conter um valor dos seguintes tipos de dados:

  • BLOB
  • boolean
  • collection
  • date
  • inteiro longo
  • object
  • picture
  • pointer
  • real
  • text
  • time
  • null
  • indefinido

Os arrays não podem ser armazenados em variáveis variant.

Tanto no modo interpretado como no modo compilado, a uma mesma variável variante podem ser atribuídos conteúdos de tipos diferentes. Ao contrário dos tipos de variáveis regulares, o tipo de conteúdo da variável de variante é diferente do próprio tipo de variável variant. Por exemplo:

C_VARIANT($variant)

$variant:="hello world"
$vtype:=Type($variant) // 12 (Is variant)
$vtypeVal:=Value type($variant) // 2 (Is text)

$variant:=42
$vtype:=Type($variant) // 12 (Is variant)
$vtypeVal:=Value type($variant) // 1 (Is real)

Pode utilizar variáveis variant onde quer que sejam esperadas variáveis, apenas tem de se certificar de que o tipo de dados do conteúdo da variável é do tipo esperado. Ao aceder a variáveis variant, apenas o seu valor actual é tido em conta. Por exemplo:

C_VARIANT($v)
$v:="hello world"
$v2:=$v //atribuir variável a outra variável

$t:=Type($v) // 12 (Is variant)
$t2:=Type($v2) // 2 (Is text)

Variant can be used to declare method parameters ($0, $1,...) that can be of various types. Neste caso, pode construir o seu código testando, por exemplo, o tipo de valor do parâmetro:

C_VARIANT($1)
Case of
: (Value type($1)=Is longint)
...
: (Value type($1)=Is text)
...
End case

Quando as variáveis variant não são necessárias (ou seja, quando o tipo de dados é conhecido), recomenda-se a utilização de variáveis de tipo regular. As variáveis de tipo regular proporcionam um melhor desempenho, tornam o código mais claro e são úteis para o compilador evitar erros relacionados com a passagem de tipos de dados inesperados.