Pular para o conteúdo principal

Operadores

Da precedência mais alta para a mais baixa. Todo operador binário é associativo à esquerda: a - b - c é (a - b) - c.

NívelOperadoresSignificadoTipos dos operandos
1( ) f(…)agrupamento, chamada de função interna
2! - ~ (unários)negação lógica, negação aritmética, negação bit a bit!: qualquer · -: Integer/Real · ~: Integer
3* /multiplicação, divisãoInteger/Real
4+ -adição ou concatenação, subtraçãoInteger/Real, ou Text + Text
5<< >>deslocamento à esquerda, deslocamento aritmético à direitaInteger
6< <= > >=ordenaçãodois números ou dois Texts
7== !=igualdadequalquer
8&AND bit a bitInteger
9^XOR bit a bitInteger
10|OR bit a bitInteger
11&&AND lógico (os dois lados são sempre avaliados)qualquer (valor verdadeiro)
12||OR lógico (os dois lados são sempre avaliados)qualquer (valor verdadeiro)

Não há operador de módulo (%), de exponenciação, ternário (?:) nem vírgula.

aviso

&& e || não fazem curto-circuito. Os dois operandos são sempre avaliados, primeiro o da esquerda, depois o da direita. Uma chamada de função interna à direita é executada mesmo quando o lado esquerdo já decidiu o resultado, e, se essa chamada falhar, a ação é interrompida. Proteja-a com um if aninhado:

text = ClipboardGetText();
idx = StringGetIndexOf(text, ":");

// ERRADO: quando idx é -1, StringGetSubstring(text, -1, 5) é executada mesmo assim e interrompe a ação
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }

// CERTO: o segundo teste só é executado quando o primeiro é verdadeiro
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
aviso

Os operadores bit a bit têm precedência menor que as comparações (como em C). flags & 4 == 4 é lido como flags & (4 == 4), que é flags & true, que é 0. Sempre coloque a máscara entre parênteses: (flags & 4) == 4 ou (flags & 4) != 0.

aviso

As comparações não se encadeiam. 0 < x < 10 é lido como (0 < x) < 10, que compara um Bool com um Integer e é sempre false. Escreva x > 0 && x < 10.