Regras para tipos mistos
Não há conversão implícita geral. Cada operador tem uma lista curta de combinações de tipos que ele
entende. Qualquer outra combinação não gera erro. Ela produz silenciosamente Integer 0 (ou
false, no caso de uma ordenação), e o script continua sendo executado. Isso é proposital, para que
um único valor inesperado não aborte uma ação no meio. Também significa que uma expressão com tipo
errado falha em silêncio, então verifique com UtilityPrint quando um resultado parecer errado.
| Operador | Combinações aceitas → resultado | Qualquer outra |
|---|---|---|
+ | Text + Text → Text (concatenação) Integer + Integer → Integer mistura de Integer/Real → Real | 0 |
- * | Integer ∘ Integer → Integer mistura de Integer/Real → Real | 0 |
/ | Integer / Integer → Integer, truncado em direção a zero (-7 / 2 é -3)mistura de Integer/Real → Real divisão por zero → 0 ou 0.0, sem erro | 0 |
== != | mesmo tipo → comparados por valor (Text de forma exata e diferenciando maiúsculas de minúsculas, Window pelo identificador) Integer com Real → comparados numericamente ( 5 == 5.0) | nunca iguais: 1 == true, "5" == 5 e w == 0 são todos false |
< <= > >= | dois números (mistura de Integer/Real permitida) → ordem numérica Text com Text → ordinal, diferenciando maiúsculas de minúsculas (unidades de código UTF-16: "Z" < "a") | false para os quatro, então !(a < b) não significa a >= b aqui |
&& || ! | quaisquer tipos, pelo valor verdadeiro → Bool | |
& | ^ | Integer ∘ Integer → Integer | 0 (um operando Bool ou Real conta: true & true é 0) |
<< >> | Integer por Integer de 0 a 63 → Integer. >> preserva o sinal: -16 >> 2 é -4. | 0, inclusive para deslocamentos abaixo de 0 ou acima de 63 |
- unário | Integer → Integer, Real → Real | 0 |
~ | Integer → Integer (~0 é -1) | 0 |
Conversão entre tipos:
| De → Para | Como |
|---|---|
| Integer → Real | automática quando passado a um parâmetro de função interna declarado como Real; nos demais casos, n * 1.0 (qualquer aritmética com um Real produz um Real) |
| Real → Integer | MathRound(r) (metades arredondadas para longe do zero), MathFloor(r) ou MathCeil(r) |
| qualquer tipo → Text | StringFormat("{0}", value, "") |
| Bool → Integer | if (b) n = 1; else n = 0; |
| Text → número | StringToNumber(text, false) para o que uma pessoa digitou (no formato regional dela; os grupos de dígitos devem segui-lo, então 1.5 não é um número para um usuário de português (Brasil)), true para texto de máquina (ponto decimal ., sem separador de milhares). Integer quando é inteiro, senão Real; use StringIsNumber antes se o texto puder não ser um número (veja este exemplo). |
| número → Text | StringFromNumber(n, decimals, invariantCulture), com decimals -1 para quantas casas forem necessárias |
| Integer → Text hexadecimal | nenhuma função interna faz isso. Monte-o com deslocamentos (veja este exemplo). |