Saltar al contenido principal
Versión: Siguiente

Value type

Value type ( expresion ) -> Resultado

ParámetroTipoDescripción
expresionExpresión🡒Expresión cuyo valor resultante debe ser probado
ResultadoEntero largo🡐Número de tipo de dato

Descripción

El comando Value type devuelve el tipo del valor resultante de la evaluación de la expresion que pasó como parámetro.

El comando devuelve un valor numérico que se puede comparar con una de las siguientes constantes del tema Tipos de campos y variables:

ConstanteTipoValor
_o_Is floatEntero largo35
Is BLOBEntero largo30
Is BooleanEntero largo6
Is collectionEntero largo42
Is dateEntero largo4
Is longintEntero largo9
Is nullEntero largo255
Is objectEntero largo38
Is pictureEntero largo3
Is pointerEntero largo23
Is realEntero largo1
Is textEntero largo2
Is timeEntero largo11
Is undefinedEntero largo5
Is variantEntero largo12
Object arrayEntero largo39

Este comando está designado para devolver el tipo de una expresión escalar, por ejemplo el valor almacenado o devuelto por el parámetro expresion. En particular, se puede aplicar a las siguientes expresiones 4D:

  • Propiedades del objetos (emp.name),
  • Elementos de la colección (myCol[5]).

Nota: las propiedades numéricas de los objetos siempre se consideran valores reales:

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

Value type se puede aplicar a cualquier expresión 4D válida, incluyendo campos, variables y parámetros. En este caso, a diferencia del comando Type, Value type devuelve el tipo internal del valor resultante de la evaluación de la expresion y no su tipo declarado. Dado que el lenguaje 4D convierte algunos tipos de valores internamente, el resultado de Value type puede diferir del tipo declarado. Por ejemplo, 4D convierte internamente los valores de campo de tipo "Entero 64 bits". Esto da los siguientes resultados:

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

Otras diferencias están relacionadas con arrays (la evaluación de una array devuelve el índice de elementos actual) y el modo compilado. En la tabla siguiente se enumeran estas diferencias:

Tipo declaradoType resultadoValue type resultado (interpretado)Value type resultado (compilado)Comentario
ARRAY TEXT($t;1)Text arrayIs realIs longint$t contiene el índice del elemento actual, que es un número
Campo AlfaIs alpha fieldIs textIs text4D maneja internamente todas las cadenas como textos
Campo EnteroIs integerIs realIs longintPor motivos de optimización, en modo interpretado todos los valores numéricos se consideran reales y...
Campo Entero largoIs longintIs realIs longint... en modo compilado, todos los valores enteros se consideran enteros largos (*)
Campo Entero 64 bitsIs integer 64 bitsIs realIs longint

(*) Si desea escribir una prueba para un valor de tipo numérico válido para los modos compilado e interpretado, puede considerar el uso de un código como:

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

Nota de compatibilidad: a partir de 4D v16 R6, las fechas se almacenan en las propiedades objeto, ya sea con el tipo fecha o como texto en formato de fecha ISO. Para más información, consulte el selector Dates inside objects del comando SET DATABASE PARAMETER.

Ejemplo 1

Usted desea manejar los varios tipos posibles de un valor propiedad objeto:

 Case of
    :(Value type($o.value)=Is real)
  //handle a numeric value
    :(Value type($o.value)=Is text)
  //handle a text
    :(Value type($o.value)=Is object)
  //handle a sub-object
       ...
 End case

Ejemplo 2

Desea obtener la suma de todos los valores numéricos en una colección:

 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 since collections start at 0
    If(Value type($col[$i])=Is real)
       $sum:=$sum+$col[$i]
    End if
 End for
 ALERT(String($sum)) //95

Ver también

OB Get type
Type