FlowsGuia

Condições: se, senão se, senão

Um nó Condição deixa o flow escolher. Ele tem um teste if, quantos testes else if você quiser e um else; quando a execução chega nele, os testes são verificados em ordem, o primeiro verdadeiro roda o ramo dele, e todos os outros ramos são ignorados. Abaixo dos ramos o flow volta a ser uma linha só e continua.

O que você vai aprender
  • Adicionar um nó Condição e preencher os ramos if / else if / else
  • Escrever um teste de ramo que devolve true ou false
  • Ler resultados depois da junção, qualquer que seja o ramo que rodou
  • Ver o caminho escolhido e os ramos ignorados numa execução

Um nó, um caminho

No canvas, um nó Condição se abre em colunas, uma por ramo. Cada coluna começa com uma pílula — if true, else if, else, ou o nome que você der — que mostra o teste embaixo, e guarda os passos daquele ramo. Todas as colunas fecham numa tampa só, a junção; o passo abaixo da junção roda depois do ramo que rodou, qualquer que seja. Um ramo vazio é permitido: um else sem passos quer dizer só “senão, siga direto”.

O ramo else if foi o escolhido e está verde; os ramos if e else ficam apagados como ignorados.

Exatamente um ramo roda por passagem. Os testes são verificados de cima para baixo — Verifica os ramos em ordem e roda o primeiro verdadeiro; o else roda quando nenhum é. — então ordene do mais específico para o mais geral. Para rodar vários ramos ao mesmo tempo, use Ramos em paralelo: uma condição serve para escolher.

Como montar

  1. Adicione o nó

    Clique num + da linha e escolha Condição (Ramificação se / senão). Ela chega com um ramo if true e um ramo else, os dois vazios.

  2. Escreva o teste if

    Clique no nó. No painel, digite o teste if no editor de expressão, por exemplo nodes.start.output.score >= 80. Ao digitar nodes., aparecem os passos acima com os campos.

  3. Adicione ramos else if

    Add else if acrescenta um ramo com teste próprio, verificado depois dos de cima. Remova um com o X dele. O ramo else está sempre lá, por último, sem teste.

  4. Preencha os ramos

    Cada coluna tem o próprio + abaixo da pílula. Coloque ali os passos daquele caminho — qualquer tipo de passo, inclusive outras condições e loops. Cada linha de ramo no painel da condição tem um campo de nome (com if true, else de exemplo); o nome digitado aparece no lugar na pílula.

  5. Continue abaixo da junção

    O + abaixo da tampa adiciona o passo que roda depois da condição, qualquer que tenha sido o ramo.

Escrevendo o teste de um ramo

Um teste é uma expressão JavaScript, rodada no mesmo motor isolado das expressões de binding — sem rede, sem arquivos. Ele lê nodes.<alias>.output de cada passo que já rodou (as entradas do Início são nodes.start.output enquanto o nó mantém o rótulo Start), vars.NAME para variáveis e, dentro de um loop, item, index e loops.<id> — então uma condição no corpo de um loop decide uma vez por item.

JavaScriptbranch-tests.js
// if
nodes.fetchOrder.output.total >= 1000
// else if
nodes.fetchOrder.output.items.some((i) => i.fragile)
// else if — a variable is a string
vars.REGION === "eu" && item.country !== "PT"

Lendo resultados depois da junção

Um passo num ramo que não rodou não tem saída, então um passo abaixo da junção que o lê direto falha. Quando cada ramo produz o valor de que você precisa, leia com encadeamento opcional numa expressão e pegue o que existir:

JavaScriptafter-join.js
nodes.goldPrice?.output?.price ?? nodes.standardPrice?.output?.price

A própria saída da condição registra a escolha — {"selected": "true"}, {"selected": "elseif-…"} ou {"selected": "false"} para o else — e é o que a visão da execução lê para desenhar o caminho escolhido.

Uma condição na execução

Quando a execução passa por uma condição, o ramo escolhido acende como qualquer caminho executado e cada passo dos outros ramos fica marcado como Ignorado e apagado — de relance você vê para onde o flow foi. Clicar na condição mostra qual ramo ela escolheu. Dentro de um loop, a escolha pertence a uma iteração: escolha outra iteração no loop e o canvas redesenha o caminho daquela iteração.

SituaçãoO que roda
O teste if é verdadeiroO ramo if, depois o passo abaixo da junção
O if é falso, um else if é verdadeiroSó o primeiro ramo else if verdadeiro
Todos os testes são falsosO ramo else (ou nada, se ele estiver vazio)
Um teste lança erro ou devolve algo que não é booleanoNada — a condição falha e a execução também

Regras

  • Um if, quantos else if quiser, um else, nessa ordem; o else não tem teste.
  • Condições se aninham: um ramo pode ter outra condição, um loop ou ramos em paralelo.
  • Um teste só enxerga passos que já rodaram. Citar um passo abaixo da condição, ou num ramo ignorado, lança erro.