Opérateurs
| Catégorie | Opérateurs |
|---|---|
| Arithmétique | + - * / % |
| Comparaison | == != < <= > >= |
| Logique | &&/and, ||/or, ! |
| Coalescence nulle | ?? |
| Appartenance | in |
| Binaire (bits) | & | ^ ~ << >> |
| Assignation | = += -= *= /= %= &= |= ^= <<= >>= |
| Incrémentation/décrémentation | ++ -- (postfixe) |
| Ternaire | cond ? a : b |
Notes :
+sur deux nombres les additionne ; si l'un des deux côtés est une chaîne ou duton.html, il concatène (en convertissant l'autre côté en texte d'abord) — le résultat estton.htmlsi l'un des opérandes l'était.<,<=,>,>=comparent deux nombres numériquement, ou deux chaînes/valeurston.htmllexicographiquement ; comparer toute autre combinaison (ou un tableau, un dict, un booléen) est une erreur d'exécution plutôt qu'un résultat silencieusement dénué de sens.==/!=utilisent l'égalité structurelle : nombres/booléens/nil comparent par valeur, une chaîne et une valeur html avec le même texte sont égales, et les tableaux/dicts comparent élément par élément (récursivement) plutôt que par référence —[1, 2] == [1, 2]vauttrue./et%lèvent tous les deux "Division by zero" pour un côté droit à zéro, plutôt que de produire silencieusementinf/NaN.and/orsont des synonymes exacts de&&/||— utilise celui qui se lit le mieux.??("coalescence nulle") évalue son côté gauche et le retourne tel quel sauf s'il vautnil, auquel cas il évalue et retourne le côté droit à la place — le côté droit n'est jamais évalué autrement, donc on peut y mettre un fallback avec effets de bord sans risque. Pratique avec les accès aux dicts :dict["manquant"] ?? "defaut".inteste l'appartenance :valeur in tableauvérifie les éléments du tableau (avec les mêmes règles d'égalité que==),valeur in dictvérifie les clés du dict, etvaleur in chainecherche une sous-chaîne. Le côté droit doit être un tableau, un dict, ou une chaîne/ton.html— toute autre valeur est une erreur d'exécution.&,|,^,~,<<,>>traitent les deux côtés comme des entiers (en tronquant la partie décimale), opèrent sur une représentation 64 bits en complément à deux, puis reconvertissent le résultat dans le type nombre habituel de TON618 — il n'y a pas de type entier séparé, donc6 & 3est juste un nombre comme un autre (2). Les deux opérandes doivent être des nombres, sinon c'est une erreur d'exécution.&/|/^partagent tous le même niveau de priorité (moins prioritaire que==, plus prioritaire que&&) — utilise des parenthèses en les mélangeant pour plus de clarté.
Ajoutés en beta-2.0.0 :
| Opérateur | Sens | Exemple |
|---|---|---|
** / **= | Puissance (associatif à droite) | 2 ** 10 vaut 1024 |
.. / ..= | Intervalle, fin exclue / incluse | 0..5, 1..=10 |
|> | Pipe : la valeur de gauche devient le premier argument | x |> f(y) vaut f(x, y) |
?. | Chaînage optionnel : nil au lieu d'une erreur | user?.address?.city |
??= | Assigne seulement si la valeur est nil | config.port ??= 8080 |
. | Accès à une propriété / méthode | point.x, "hi".upper() |
=> | Fonction fléchée | n => n * 2 |
-2 ** 2vaut-4:**lie plus fort que le moins unaire, comme en maths et en Python.+concatène aussi deux tableaux ([1, 2] + [3]vaut[1, 2, 3], un nouveau tableau) ;*répète une chaîne ("ab" * 3vaut"ababab").a..bs'évalue en un tableau des entiers deaàb - 1(a..=binclutb) ; dans une boucleforil compte de façon paresseuse, doncfor i in 0..1000000ne construit jamais de tableau.?.marche sur l'accès à une propriété, l'indexation et l'appel :obj?.name,list?.[0],callback?.(). Mets-le à chaque étape qui peut êtrenil.