Aller au contenu principal

Opérateurs

De la priorité la plus haute à la plus basse. Tous les opérateurs binaires sont associatifs à gauche : a - b - c équivaut à (a - b) - c.

NiveauOpérateursSignificationTypes des opérandes
1( ) f(…)regroupement, appel de fonction intégrée
2! - ~ (unaires)non logique, opposé, non bit à bit! : tous · - : Integer/Real · ~ : Integer
3* /multiplication, divisionInteger/Real
4+ -addition ou concaténation, soustractionInteger/Real, ou Text + Text
5<< >>décalage à gauche, décalage arithmétique à droiteInteger
6< <= > >=ordredeux nombres, ou deux Text
7== !=égalitétous
8&ET bit à bitInteger
9^OU exclusif bit à bitInteger
10|OU bit à bitInteger
11&&ET logique (les deux côtés sont toujours évalués)tous (valeur de vérité)
12||OU logique (les deux côtés sont toujours évalués)tous (valeur de vérité)

Il n'y a ni modulo (%), ni opérateur de puissance, ni opérateur ternaire (?:), ni opérateur virgule.

attention

&& et || ne court-circuitent pas. Les deux opérandes sont toujours évalués, de gauche à droite. Un appel de fonction intégrée à droite s'exécute même quand le côté gauche a déjà décidé du résultat, et si cet appel échoue, l'action s'arrête. Protégez-vous plutôt avec un if imbriqué :

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

// FAUX : quand idx vaut -1, StringGetSubstring(text, -1, 5) s'exécute quand même et arrête l'action
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }

// JUSTE : le second test ne s'exécute que si le premier est vrai
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
attention

Les opérateurs bit à bit ont une priorité plus faible que les comparaisons (comme en C). flags & 4 == 4 est lu comme flags & (4 == 4), c'est-à-dire flags & true, qui vaut 0. Mettez toujours le masque entre parenthèses : (flags & 4) == 4 ou (flags & 4) != 0.

attention

Les comparaisons ne s'enchaînent pas. 0 < x < 10 est lu comme (0 < x) < 10, qui compare un Bool à un Integer et vaut toujours false. Écrivez x > 0 && x < 10.