Règles des types mélangés
Il n'y a pas de conversion implicite générale. Chaque opérateur comprend une courte liste de
combinaisons de types. Toute autre combinaison ne déclenche pas d'erreur. Elle donne
silencieusement l'Integer 0 (ou false pour une comparaison d'ordre) et le script continue.
C'est voulu : une valeur inattendue n'interrompt pas une action en plein milieu. Cela signifie aussi
qu'une expression mal typée échoue sans bruit : vérifiez donc avec UtilityPrint lorsqu'un résultat
semble faux.
| Opérateur | Combinaisons acceptées → résultat | Toute autre combinaison |
|---|---|---|
+ | Text + Text → Text (concaténation) Integer + Integer → Integer mélange Integer/Real → Real | 0 |
- * | Integer ∘ Integer → Integer mélange Integer/Real → Real | 0 |
/ | Integer / Integer → Integer, tronqué vers zéro (-7 / 2 vaut -3)mélange Integer/Real → Real division par zéro → 0 ou 0.0, sans erreur | 0 |
== != | même type → comparaison par valeur (Text exactement et en respectant la casse, Window par handle) Integer et Real → comparaison numérique ( 5 == 5.0) | jamais égaux : 1 == true, "5" == 5 et w == 0 valent tous false |
< <= > >= | deux nombres (mélange Integer/Real autorisé) → ordre numérique Text et Text → ordinal, sensible à la casse (unités de code UTF-16 : "Z" < "a") | false pour les quatre : ici, !(a < b) ne signifie donc pas a >= b |
&& || ! | tous types, selon leur valeur de vérité → Bool | |
& | ^ | Integer ∘ Integer → Integer | 0 (un opérande Bool ou Real compte : true & true vaut 0) |
<< >> | Integer décalé d'un Integer de 0 à 63 → Integer. >> conserve le signe : -16 >> 2 vaut -4. | 0, y compris pour les décalages inférieurs à 0 ou supérieurs à 63 |
- unaire | Integer → Integer, Real → Real | 0 |
~ | Integer → Integer (~0 vaut -1) | 0 |
Convertir d'un type à l'autre :
| De → Vers | Comment |
|---|---|
| Integer → Real | automatique lorsqu'il est passé à un paramètre de fonction intégrée déclaré Real ; ailleurs n * 1.0 (toute opération arithmétique avec un Real donne un Real) |
| Real → Integer | MathRound(r) (moitiés arrondies en s'éloignant de zéro), MathFloor(r) ou MathCeil(r) |
| n'importe quoi → Text | StringFormat("{0}", value, "") |
| Bool → Integer | if (b) n = 1; else n = 0; |
| Text → nombre | StringToNumber(text, false) pour ce qu'une personne a saisi (son format régional ; les groupes de chiffres doivent le respecter, donc 12 34,5 n'est pas un nombre pour un utilisateur en français (France)), true pour un texte destiné aux machines (point décimal ., pas de séparateur de milliers). Integer si la valeur est entière, sinon Real ; StringIsNumber d'abord si le texte risque de ne pas être un nombre (voir cet exemple). |
| nombre → Text | StringFromNumber(n, decimals, invariantCulture), decimals à -1 pour autant de décimales que nécessaire |
| Integer → Text hexadécimal | aucune fonction intégrée ne le fait. Construisez-le avec des décalages (voir cet exemple). |