Pular para o conteúdo

Operadores

Tabela completa dos operadores da linguagem.

Todos os operadores#

OperadorCategoriaSignificado
:=atribuiçãoatribui ou declara
+= -= *= /= %=atribuiçãocomposta
+ - * / %aritméticasoma, subtração, produto, divisão, resto
**aritméticapotência — associa à direita
~/aritméticadivisão inteira (preferido)
//aritméticadivisão inteira (ambíguo — ver abaixo)
is / ==comparaçãoigual
isnt / is not / !=comparaçãodiferente
bigger / >comparaçãomaior
smaller / <comparaçãomenor
bigger_eq / >=comparaçãomaior ou igual
smaller_eq / <=comparaçãomenor ou igual
and or notlógicaconjunção, disjunção, negação
??coalescênciaalternativa quando o esquerdo é void
?.acesso seguromembro/método, ou void se o objeto for void
in / not inpertinênciao elemento está na coleção?
...spread / restexpande ou coleta
>>pipelineencadeia sift / morph / distill
.acessomembro
[]acessoíndice ou fatia
()chamadainvocação
->tipotipo de retorno de uma ação
=>lambdacorpo de lambda (alternativa a :)
@metadadonome do decorador após mark
$"…"interpolaçãostring 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 10

O 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