Operadores
Aritméticos, comparação, lógicos, coalescência, pertinência e a precedência completa.
Aritméticos#
dataforge
out 7 + 2 # 9
out 7 - 2 # 5
out 7 * 2 # 14
out 7 / 2 # 3.5 — sempre Float
out 7 % 2 # 1
out 7 ** 2 # 49
out 7 ~/ 2 # 3 — divisão inteiradataforge
x := 7 // 2 # divisão inteira (dígito depois)
y := total // len(xs) # divisão inteira (chamada depois)
z := 3 // marcar item # COMENTÁRIO
w := a // b # COMENTÁRIOComparação#
Cada operador tem duas grafias, equivalentes. A forma por palavra lê melhor em condições longas; a simbólica é mais compacta.
| Palavra | Símbolo | Significado |
|---|---|---|
is | == | igual |
isnt / is not | != | diferente |
bigger | > | maior |
smaller | < | menor |
bigger_eq | >= | maior ou igual |
smaller_eq | <= | menor ou igual |
Comparações encadeadas#
Funcionam como em matemática — e o termo do meio é avaliado uma única vez:
dataforge
nota := 7.5
out 0 <= nota <= 10 # yes
out 1 smaller 5 smaller 10 # yes
out 10 < 5 < 20 # noLógicos#
dataforge
out yes and no # no
out yes or no # yes
out not yes # noand e or têm avaliação curta-circuito: o lado direito só é avaliado se necessário.
Coalescência e acesso seguro#
dataforge
config := void
out config ?? "padrao" # "padrao"
out config?.porta ?? 8080 # 8080, sem estourar?? só entra em ação quando o valor é `void`. no, 0 e "" são valores legítimos, e passam direto:
dataforge
out no ?? "padrao" # no — falso é um valor
out 0 ?? 99 # 0 — zero é um valor
out "" ?? "vazio" # "" — texto vazio é um valorEssa distinção é o que separa ?? de um or: com or, todos os três cairiam no padrão.
Pertinência#
dataforge
out 2 in [1, 2, 3] # yes — elemento na lista
out "a" in "casa" # yes — subtexto
out "chave" in {"chave": 1} # yes — chave do vault
out 9 not in [1, 2, 3] # yesEm um Vault, in testa chaves, não valores — a mesma convenção de cycle k in vault.
Atribuição composta#
dataforge
x := 10
x += 5 # 15
x -= 3 # 12
x *= 2 # 24
x /= 4 # 6.0
x %= 4 # 2.0Precedência#
Da mais alta para a mais baixa:
| Nível | Operadores | Associatividade |
|---|---|---|
| 1 | () [] . ?. | esquerda |
| 2 | ** | direita |
| 3 | - + not (unários) | direita |
| 4 | * / % ~/ | esquerda |
| 5 | + - | esquerda |
| 6 | comparações | encadeável |
| 7 | not | direita |
| 8 | and | esquerda |
| 9 | or | esquerda |
| 10 | ?? | esquerda |
| 11 | given … otherwise (ternário) | direita |
| 12 | >> | esquerda |
As consequências que mais surpreendem:
dataforge
out 2 ** 3 ** 2 # 512, e não 64 — potência associa à direita
out -2 ** 2 # -4, e não 4 — o sinal aplica depois
out 2 + 3 * 4 # 14A tabela completa está na Referência de precedência.