Reglas de tipos mixtos
No hay conversión implícita general. Cada operador tiene una lista breve de combinaciones de tipos
que entiende. Cualquier otra combinación no genera un error: da en silencio Integer 0 (o
false en una comparación de orden) y el script sigue ejecutándose. Es deliberado, para que un valor
extraño no interrumpa una acción a la mitad. También significa que una expresión con tipos
equivocados falla en silencio, así que compruébela con UtilityPrint cuando un resultado parezca
incorrecto.
| Operador | Combinaciones aceptadas → resultado | Cualquier otra |
|---|---|---|
+ | Text + Text → Text (concatenación) Integer + Integer → Integer mezcla de Integer y Real → Real | 0 |
- * | Integer ∘ Integer → Integer mezcla de Integer y Real → Real | 0 |
/ | Integer / Integer → Integer, truncado hacia cero (-7 / 2 es -3)mezcla de Integer y Real → Real división entre cero → 0 o 0.0, sin error | 0 |
== != | mismo tipo → se comparan por valor (Text de forma exacta y distinguiendo mayúsculas de minúsculas, Window por identificador) Integer frente a Real → se comparan numéricamente ( 5 == 5.0) | nunca son iguales: 1 == true, "5" == 5 y w == 0 son todos false |
< <= > >= | dos números (se admite la mezcla de Integer y Real) → orden numérico Text frente a Text → ordinal, distingue mayúsculas de minúsculas (unidades de código UTF-16: "Z" < "a") | false para los cuatro, así que aquí !(a < b) no significa a >= b |
&& || ! | cualquier tipo, según su veracidad → Bool | |
& | ^ | Integer ∘ Integer → Integer | 0 (un operando Bool o Real cuenta: true & true es 0) |
<< >> | Integer desplazado por un Integer de 0 a 63 → Integer. >> conserva el signo: -16 >> 2 es -4. | 0, incluidas las cantidades de desplazamiento menores que 0 o mayores que 63 |
- unario | Integer → Integer, Real → Real | 0 |
~ | Integer → Integer (~0 es -1) | 0 |
Convertir entre tipos:
| De → A | Cómo |
|---|---|
| Integer → Real | automático al pasarlo a un parámetro de función integrada declarado como Real; en otros casos, n * 1.0 (cualquier operación aritmética con un Real da un Real) |
| Real → Integer | MathRound(r) (las mitades se alejan de cero), MathFloor(r) o MathCeil(r) |
| cualquier tipo → Text | StringFormat("{0}", value, "") |
| Bool → Integer | if (b) n = 1; else n = 0; |
| Text → número | StringToNumber(text, false) para lo que escribió una persona (en su formato regional; los grupos de dígitos deben seguirlo, así que 1,5 no es un número para un usuario de español (México)), true para texto de máquina (punto . decimal, sin separadores de miles). Integer si es entero, si no Real; use antes StringIsNumber si el texto podría no ser un número (consulte este ejemplo). |
| número → Text | StringFromNumber(n, decimals, invariantCulture), con decimals en -1 para usar tantos como hagan falta |
| Integer → Text hexadecimal | ninguna función integrada lo hace. Constrúyalo con desplazamientos (consulte este ejemplo). |