Aller au contenu principal

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érateurCombinaisons acceptées → résultatToute 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 → Integer0 (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
- unaireInteger → Integer, Real → Real0
~Integer → Integer (~0 vaut -1)0

Convertir d'un type à l'autre :

De → VersComment
Integer → Realautomatique 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 → IntegerMathRound(r) (moitiés arrondies en s'éloignant de zéro), MathFloor(r) ou MathCeil(r)
n'importe quoi → TextStringFormat("{0}", value, "")
Bool → Integerif (b) n = 1; else n = 0;
Text → nombreStringToNumber(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 → TextStringFromNumber(n, decimals, invariantCulture), decimals à -1 pour autant de décimales que nécessaire
Integer → Text hexadécimalaucune fonction intégrée ne le fait. Construisez-le avec des décalages (voir cet exemple).