Saltar para o conteúdo principal
Versão: Próximo

Value type

Value type ( expressão ) -> Resultado

ParâmetroTipoDescrição
expressãoExpression🡒Expressão cujo valor resultante será testado
ResultadoInteiro longo🡐Número do tipo de dado

Descrição

O comando Value type devolve o tipo de valor resultante da avaliação da expressão que passou como parâmetro.

O comando devolve um valor numérico que pode ser comparado com uma das constantes abaixo do tema Tipos de campos e variáveis:

ConstanteTipoValor
_o_Is floatInteiro longo35
Is BLOBInteiro longo30
Is BooleanInteiro longo6
Is collectionInteiro longo42
Is dateInteiro longo4
Is longintInteiro longo9
Is nullInteiro longo255
Is objectInteiro longo38
Is pictureInteiro longo3
Is pointerInteiro longo23
Is realInteiro longo1
Is textInteiro longo2
Is timeInteiro longo11
Is undefinedInteiro longo5
Is variantInteiro longo12
Object arrayInteiro longo39

Este comando foi criado para devolver o tipo de uma expressão escalar, ou seja, valores armazenados ou devolvidos pela expressão. Em particular, pode ser aplicada às seguintes expressões 4D:

  • Propriedades de objetos (emp.name),
  • Elementos da coleção (myCol[5]).

Nota: As propriedades numéricas dos objetos sempre são consideradas valores reais:

 var $o : Object
 $o:=New object("value";42)
 $vType:=Value type($o.value) //$vType=Is real

Value type pode ser aplicado a qualquer expressão 4D válida, incluindo campos, variáveis e parâmetros. Neste caso, diferente do comando Type, Value type devolve o tipo internal de valor resultante da avaliação da expressão e não seu tipo declarado. Dado que a linguagem 4D converte alguns tipos de valores internamente, o resultado de Value type pode diferir do tipo declarado. Por exemplo, 4D converte internamente os valores de campo de tipo "Inteiro 64 bits". Isso dá os resultados abaixo:

 $vType1:=Type([myTable]Long64field) //$vType=Is integer 64 bits
 $vType2:=Value type([myTable]Long64field) //$vType=Is real (em modo interpretado)

Outras diferenças estão relacionadas com arrays (a avaliação de um array devolve o índice de elementos atual) e o modo compilado. Na tabela abaixo estas diferenças são numeradas:

Tipo declaradoType resultadoValue type resultado (interpretado)Value type resultado (compilado)Comentário
ARRAY TEXT($t;1)Text arrayIs realIs longint$t contém o índice de elemento atual, que é um número
Campo AlfaIs alpha fieldIs textIs text4D maneja internamente todas as strings como textos
Campo InteiroIs integerIs realIs longintPor motivos de otimização, em modo interpretado todos os valores numéricos são considerados reais e...
Campo Inteiro LongoIs longintIs realIs longint... em modo compilado, todos os valores inteiros são considerados inteiros longos
Campo Inteiro 64 bitsIs integer 64 bitsIs realIs longint

Se quiser escrever um teste para um valor de tipo numérico válido para os modos compilado e interpretado, pode considerar o uso de um código como:

 If(Value type($myValue)=Is longint)|(Value type($myValue)=Is real)

Nota de compatibilidade: A partir de 4D v16 R6, datas são armazenadas em propriedades de objeto ou com o tipo data ou como texto em formato data ISO. Para saber mais veja os comandos Dates inside objects ou SET DATABASE PARAMETER.

Exemplo 1

Se quiser manejar os vários tipos possíveis de um valor propriedade objeto:

 Case of
    :(Value type($o.value)=Is real)
  //maneja um valor numérico
    :(Value type($o.value)=Is text)
  //maneja um texto
    :(Value type($o.value)=Is object)
  //maneja um sub-objeto
       ...
 End case

Exemplo 2

Se quiser somar todos os valores númericos em uma coleção

 var $col : Collection
 
var $sum : Real
 $col:=New collection("Hello";20;"World2";15;50;Current date;True;10)
 For($i;0;$col.length-1) //-1 já que coleções começam em  0
    If(Value type($col[$i])=Is real)
       $sum:=$sum+$col[$i]
    End if
 End for
 ALERT(String($sum)) //95


Ver também

OB Get type
Type