Saltar al contenido principal

Operadores

De mayor a menor precedencia. Todos los operadores binarios son asociativos por la izquierda: a - b - c es (a - b) - c.

NivelOperadoresSignificadoTipos de operando
1( ) f(…)agrupación, llamada a función integrada
2! - ~ (unarios)negación lógica, cambio de signo, negación bit a bit!: cualquiera · -: Integer/Real · ~: Integer
3* /multiplicación, divisiónInteger/Real
4+ -suma o concatenación, restaInteger/Real, o Text + Text
5<< >>desplazamiento a la izquierda, desplazamiento aritmético a la derechaInteger
6< <= > >=ordendos números, o dos Text
7== !=igualdadcualquiera
8&AND bit a bitInteger
9^XOR bit a bitInteger
10|OR bit a bitInteger
11&&AND lógico (siempre se evalúan ambos lados)cualquiera (veracidad)
12||OR lógico (siempre se evalúan ambos lados)cualquiera (veracidad)

No hay operador de módulo (%), de potencia, ternario (?:) ni de coma.

aviso

&& y || no hacen cortocircuito. Ambos operandos se evalúan siempre, primero el izquierdo y luego el derecho. Una llamada a función integrada a la derecha se ejecuta aunque el lado izquierdo ya haya decidido el resultado, y si esa llamada falla, la acción se detiene. Protéjala con un if anidado:

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

// INCORRECTO: cuando idx es -1, StringGetSubstring(text, -1, 5) se ejecuta igualmente y detiene la acción
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }

// CORRECTO: la segunda comprobación solo se ejecuta cuando se cumple la primera
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
aviso

Los operadores bit a bit tienen menor precedencia que las comparaciones (igual que en C). flags & 4 == 4 se lee como flags & (4 == 4), que es flags & true, que es 0. Ponga siempre la máscara entre paréntesis: (flags & 4) == 4 o (flags & 4) != 0.

aviso

Las comparaciones no se encadenan. 0 < x < 10 se lee como (0 < x) < 10, que compara un Bool con un Integer y siempre es false. Escriba x > 0 && x < 10.