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 noO que conta como verdadeiro#
Falso (no) | Verdadeiro (yes) |
|---|---|
no, void | yes |
0, 0.0 | qualquer 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