Pular para o conteúdo principal

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.

OperadorCombinações aceitas → resultadoQualquer 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 → Integer0 (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árioInteger → Integer, Real → Real0
~Integer → Integer (~0 é -1)0

Conversão entre tipos:

De → ParaComo
Integer → Realautomá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 → IntegerMathRound(r) (metades arredondadas para longe do zero), MathFloor(r) ou MathCeil(r)
qualquer tipo → TextStringFormat("{0}", value, "")
Bool → Integerif (b) n = 1; else n = 0;
Text → númeroStringToNumber(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 → TextStringFromNumber(n, decimals, invariantCulture), com decimals -1 para quantas casas forem necessárias
Integer → Text hexadecimalnenhuma função interna faz isso. Monte-o com deslocamentos (veja este exemplo).