Pular para o conteúdo

Verdade e ausência

void, o que é verdadeiro, ?? e ?. — e por que 'não sei' não é zero.

void é a ausência: não há valor aqui. Ele não é zero, não é texto vazio e não é no — confundir os três é a origem de metade dos bugs de dados: a média que conta o “não respondeu” como zero.

dataforge
nada := void
assert nada is void
assert typeof(nada) is "Void"
assert void isnt 0 and void isnt "" and void isnt no

O que conta como verdadeiro#

Falso (no)Verdadeiro (yes)
no, voidyes
0, 0.0qualquer outro número
""qualquer texto com algo
[], {}, set()qualquer coleção com algo
dataforge
action tem_algo(x):
    given x:
        yield yes
    yield no

assert not tem_algo(0) and not tem_algo("") and not tem_algo([]) and not tem_algo(void)
assert tem_algo(-1) and tem_algo(" ") and tem_algo([0])

Tratar a ausência: `??` e `?.`#

dataforge
cliente := {"nome": "Ana"}

// ?? — o valor, ou um padrao quando e void (ou a chave nao existe).
assert cliente["telefone"] ?? "sem telefone" is "sem telefone"

// ?. — le o membro so se houver objeto; senao, void, sem erro.
endereco := void
assert endereco?.cidade is void

// 'and' e 'or' devolvem o VALOR que decidiu.
assert (void or "padrao") is "padrao"
assert (0 or "padrao") is "padrao"      // cuidado: 0 tambem e falso!
assert (0 ?? "padrao") is 0             // '??' so troca o void