Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v20 R7
Value type

Value type 


 

Value type ( expressão ) -> Resultado 
Parâmetro Tipo   Descrição
expressão  Expression in Expressão cujo valor resultante será testado
Resultado  Inteiro longo in Número do tipo de dado

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:

Constante Tipo Valor
_o_Is float Inteiro longo 35
Is BLOB Inteiro longo 30
Is Boolean Inteiro longo 6
Is collection Inteiro longo 42
Is date Inteiro longo 4
Is longint Inteiro longo 9
Is null Inteiro longo 255
Is object Inteiro longo 38
Is picture Inteiro longo 3
Is pointer Inteiro longo 23
Is real Inteiro longo 1
Is text Inteiro longo 2
Is time Inteiro longo 11
Is undefined Inteiro longo 5
Is variant Inteiro longo 12
Object array Inteiro longo 39

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:

 C_OBJECT($o)
 $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.

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

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

 C_COLLECTION($col)
 <p>C_REAL($sum)
 $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

 
PROPRIEDADES 

Produto: 4D
Tema: Linguagem
Número 1509

This command can be run in preemptive processes

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v16 R4

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v20 R7)