Operadores
Tabela completa dos operadores da linguagem.
Todos os operadores#
| Operador | Categoria | Significado |
|---|---|---|
:= | atribuição | atribui ou declara |
+= -= *= /= %= | atribuição | composta |
+ - * / % | aritmética | soma, subtração, produto, divisão, resto |
** | aritmética | potência — associa à direita |
~/ | aritmética | divisão inteira (preferido) |
// | aritmética | divisão inteira (ambíguo — ver abaixo) |
is / == | comparação | igual |
isnt / is not / != | comparação | diferente |
bigger / > | comparação | maior |
smaller / < | comparação | menor |
bigger_eq / >= | comparação | maior ou igual |
smaller_eq / <= | comparação | menor ou igual |
and or not | lógica | conjunção, disjunção, negação |
?? | coalescência | alternativa quando o esquerdo é void |
?. | acesso seguro | membro/método, ou void se o objeto for void |
in / not in | pertinência | o elemento está na coleção? |
... | spread / rest | expande ou coleta |
>> | pipeline | encadeia sift / morph / distill |
. | acesso | membro |
[] | acesso | índice ou fatia |
() | chamada | invocação |
-> | tipo | tipo de retorno de uma ação |
=> | lambda | corpo de lambda (alternativa a :) |
@ | metadado | nome do decorador após mark |
$"…" | interpolação | string com expressões embutidas |
A ambiguidade do //#
// abre comentário e é divisão inteira. A regra do lexer é conservadora — `//` é comentário, salvo quando todas estas condições valem:
- o token anterior pode terminar uma expressão (valor,
),],}); - o que vem depois começa como operando: dígito,
(,-seguido de número, ou identificador; - esse identificador abre uma chamada, índice ou membro —
len(,xs[,obj..
dataforge
x := 7 // 2 # divisão inteira
x := total // len(xs) # divisão inteira (chamada depois)
x := (a + b) // 2 # divisão inteira
x := 3 // marcar item # COMENTÁRIO
x := a // b # COMENTÁRIO (identificador solto)Comparações encadeadas#
dataforge
0 <= nota <= 10 # equivale a (0 <= nota) and (nota <= 10)
1 smaller 5 smaller 10O termo do meio é avaliado uma única vez.
Coalescência: só void dispara#
dataforge
void ?? "padrao" # "padrao"
no ?? "padrao" # no — falso é um valor
0 ?? 99 # 0 — zero é um valor
"" ?? "vazio" # "" — texto vazio é um valor