Saltar para o conteúdo principal
Versão: v20 R3 BETA

Null e indefinido

Nulo e Indefinido são tipos de dados que tratam de casos em que o valor de uma expressão não é conhecido.

Null

Null é um tipo de dados especial com um único valor possível: null. Este valor é devolvido por uma expressão que não contém nenhum valor.

Na linguagem 4D e para os atributos dos campos dos objetos, os valores nulos são gerenciados através da função Null. Esta função pode ser usada com as expressões abaixo para definir ou comparar o valor nulo:

  • atributos de objetos
  • elementos da coleção
  • variáveis do objecto, colecção, ponteiro, imagem, ou tipo de variante.

Indefinido

Indefinido não é realmente um tipo de dados. Denota uma variável que ainda não foi definida. Uma função (um método projeto que devolve um resultado) pode devolver um valor indefinido se, dentro do método, se atribuir ao resultado da função ($0) uma expressão indefinida (uma expressão calculada com ao menos uma variável indefinida). Um campo não pode ser indefinido (o comando Undefined sempre devolve False para um campo). Uma variável variant tem indefinido como valor por definição.

Operadores Null

OperaçãoSintaxeRetornaExpressionValor
IgualNull = NullParâmetrosa.nullProp = b.nullPropTrue
Null = UndefinedParâmetrosa.nullProp = b.undefinedPropTrue
Null = valor escalarParâmetrosa.nullProp = 42False
DesigualdadeNull # NullParâmetrosa.nullProp # b.nullPropFalse
Null # UndefinedParâmetrosa.nullProp # b.undefinedPropFalse
Null # valor escalarParâmetrosa.nullProp # 42True

Os valores escalares são valores do tipo string, Date, Time, Boolean, number, ou Blob. Quando declarado, o seu valor por padrão não é indefinido nem nulo. Outros tipos (Ponteiro, Imagem, Objecto, Colecção) têm valor por defeito indefinido ou nulo. Ex:

var $object : Object
var $text : Text

//$object = null
//$text = ""
info

Comparações com os operadores Maior que (>), Menor que (<), Maior ou igual a (>=), e Menor ou igual a (<=) não são suportados com valores Nulos e devolvem um erro.

Operadores indefinidos

OperaçãoSintaxeRetornaExpressionValor
IgualUndefined = UndefinedParâmetrosa.undefinedProp = b.undefinedPropTrue
Undefined = NullParâmetrosa.undefinedProp = c.nullPropTrue
Undefined = outros valoresParâmetrosa.undefinedProp = 42False
DesigualdadeUndefined # UndefinedParâmetrosa.undefinedProp # b.undefinedPropFalse
Undefined # NullParâmetrosa.undefinedProp # b.nullPropFalse
Undefined # outros valoresParâmetrosa.undefinedProp # 42True
Maior queUndefined > string, Date, Time, Boolean, numberParâmetrosa.undefinedProp > "abc"False
Menor queUndefined < string, Date, Time, Boolean, numberParâmetrosa.undefinedProp < "abc"False
Maior ou igual aUndefined >= string, Date, Time, Boolean, numberParâmetrosa.undefinedProp >= "abc"False
Menor que ou igual aUndefined <= string, Date, Time, Boolean, numberParâmetrosa.undefinedProp <= "abc"False

outros valores são expressões de qualquer tipo com um valor nem Indefinido nem Null.

info

Comparações de valores Indefinidos com Pontos, Imagem, Blob, Objecto, Colecção, Valores Indefinidos ou Nulos utilizando valores Maiores que (>), Menos que (<), Maiores ou iguais a (>=), e Menos ou iguais a (<=) os operadores não são suportados e devolvem um erro.

Exemplos

Aquí estão os diferentes resultados do comando Undefined assim como do comando Null com as propriedades dos objetos, dependendo do contexto:

C_OBJECT($vEmp)
$vEmp:=New object
$vEmp.name:="Smith"
$vEmp.children:=Null

$undefined:=Undefined($vEmp.name) // False
$null:=($vEmp.name=Null) //False

$undefined:=Undefined($vEmp.children) // False
$null:=($vEmp.children=Null) //True

$undefined:=Undefined($vEmp.parent) // True
$null:=($vEmp.parent=Null) //True

Exemplos de resultados de comparação com valores indefinidos e nulos:

var $result : Booleano
var $vObj : Objecto
var $vVar : Variante

$vObj:=Novo objecto
$vObj.null:=Nulo
// nota que $vVar não está atribuído

$result:=($vObj.undefined=42) //False
$result:=($vObj.undefined=$vObj.null) //True
$result:=($vObj.undefined=$vVar) //True

$result:=($vObj.indefinido#$vObj.null) //False
$result:=($vObj.undefined#42) //True
$result:=($vObj.undefined#$vVar) //False

$result:=($vObj.indefinido>"olá") //Falso
$result:=($vObj.indefinido>$vVar) //Error
$result:=($vObj.indefinido>$vObj.nulo) //Error
$result:=($vVar < 42) //Falso