coalesce e empty
coalesce devolve o primeiro valor que não é nulo; empty diz se um texto, lista ou objeto está vazio. Os dois são a base de qualquer tratamento de campo opcional, e a diferença entre "nulo" e "vazio" é onde mora a maioria dos erros.
Sintaxe
coalesce(valor1, valor2, …) empty(valor)
Exemplos testados
| Expressão | Resultado |
|---|---|
coalesce(outputs('Dados')?['apelido'], outputs('Dados')?['nome'], 'Cliente')apelido nulo: usa o nome | Ana |
coalesce('', 'x')texto vazio NÃO é nulo: coalesce devolve '' | (texto vazio) |
coalesce(outputs('Dados')?['apelido'], outputs('Dados')?['naoExiste'])tudo nulo: devolve nulo | null |
empty(outputs('Dados')?['apelido'])nulo conta como vazio | true |
if(empty(outputs('Dados')?['obs']), 'Sem observação', outputs('Dados')?['obs'])com obs = texto vazio | Sem observação |
empty(' ')só espaços NÃO é vazio | false |
empty(json('[]'))lista vazia | true |
outputs('Dados')?['pedido']?['naoExiste']?['x']caminho que não existe devolve nulo | null |
Quando usar
Use coalesce para valores padrão encadeados (apelido, depois nome, depois "Cliente") e empty dentro de um if para decidir o que fazer com campos opcionais. O padrão mais seguro para um campo que pode chegar nulo ou como texto vazio é if(empty(x), padrão, x), que trata os dois casos. Se o campo ainda puder ter só espaços, passe o texto por trim antes, desde que ele nunca seja nulo. Use o acesso seguro com ? em toda leitura de campo que possa não existir, para o fluxo receber nulo em vez de falhar. E teste sempre os três casos: campo preenchido, campo vazio e campo ausente.
Armadilhas
coalescenão pula texto vazio. Se o campo pode chegar como'', combine comempty:if(empty(x), y, x).- Só espaços não é vazio. Use
trim()antes deempty(). - Nulo e vazio são coisas diferentes, mas
emptytrata os dois como vazio. createArray()sem itens é inválido. Para uma lista vazia, usejson('[]').
Perguntas frequentes
Como preencher um valor padrão quando o campo está vazio?
if(empty(x), 'padrão', x) trata nulo, texto vazio e lista vazia.
O ? evita erro de campo inexistente?
Sim: x?['campo'] devolve nulo quando o campo não existe, em vez de derrubar o fluxo.