Condicionais
given, orif, otherwise, o ternário e a seleção múltipla com match.
given / orif / otherwise#
A estrutura condicional do DataForge. given lê-se "dado que":
action classificar(n):
given n bigger 0:
yield "positivo"
orif n smaller 0:
yield "negativo"
otherwise:
yield "zero"
cycle n in [5, -3, 0]:
out $"{n} -> {classificar(n)}"5 -> positivo
-3 -> negativo
0 -> zeroPode haver quantos orif você precisar, e o otherwise é opcional.
A ordem importa#
Os ramos são testados de cima para baixo, e o primeiro verdadeiro vence. Coloque sempre o mais específico primeiro:
action conceito(nota):
given nota bigger_eq 9:
yield "A"
orif nota bigger_eq 7: # só chega aqui se não for >= 9
yield "B"
orif nota bigger_eq 5:
yield "C"
otherwise:
yield "D"O ternário#
Para escolher entre dois valores, sem abrir um bloco:
n := 4
rotulo := "par" given n % 2 is 0 otherwise "impar"
out rotuloLê-se: "este valor, dado que a condição vale, senão o outro". Associa à direita, então encadeia:
n := 0
x := "positivo" given n bigger 0 otherwise "zero" given n is 0 otherwise "negativo"
out xmatch — seleção múltipla#
Quando a decisão depende do formato do valor, e não de uma condição booleana, o match é a ferramenta:
action dia(n):
match n:
point 1:
yield "segunda"
point 2:
yield "terca"
point 3:
yield "quarta"
default:
yield "desconhecido"
out dia(1), dia(3), dia(9)Diferente de um switch de C, não há fall-through: o ramo que casa executa e o match termina.
Alternativas com or#
action tipo(n):
match n:
point 1 or 2 or 3:
yield "pequeno"
point 100 or 200:
yield "redondo"
default:
yield "outro"O match do DataForge vai muito além de comparar valores — ele desmonta estruturas, testa tipos e aceita guardas. Isso está em Pattern matching.
Verdadeiro e falso#
Em contexto booleano, estes valores são falsos:
voidno0e0.0""(texto vazio)[](lista vazia){}(vault vazio)
Todo o resto é verdadeiro. Ainda assim, comparar explicitamente costuma ler melhor:
given len(itens) is 0: # claro
given not itens: # funciona, mas menos explícito