A precedência e a associatividade de operadores determina a ordem na qual os operadores são processados. Embora possa parecer natural aos que estão familiarizados com aritmética que o compilador processe o operador de multiplicação (*) antes do operador de adição (+), o compilador precisa de instruções explícitas sobre os operadores que deve processar primeiro. Essas instruções são denominadas coletivamente de precedência de operador. O ActionScript define a precedência de um operador padrão que você pode alterar usando o operador parênteses (()). Por exemplo, o seguinte código altera a precedência padrão no exemplo anterior para forçar o compilador a processar o operador de adição antes do operador de multiplicação:
var sumNumber:uint = (2 + 3) * 4; // uint == 20
Você pode encontrar situações em que dois ou mais operadores da mesma precedência aparecem na mesma expressão. Nesses casos, o compilador usa as regras de associatividade para determinar qual operador será processado primeiro. Todos os operadores binários, exceto os de atribuição, são associativos à esquerda, o que significa que os operadores à esquerda são processados antes dos que estão à direita. Todos os operadores de atribuição e o operador condicional (?:) são associativos à direita, o que significa que os operadores à direita são processados antes dos que estão à esquerda.
Por exemplo, considere os operadores "menor do que" (<) e "maior do que" (>), que têm a mesma precedência. Se os dois forem usados na mesma expressão, o operador à esquerda será processado primeiro porque os dois operadores são associativos à esquerda. Isso significa que as duas instruções a seguir produzem a mesma saída:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
O operador maior do que é processado primeiro, o que resulta em um valor true, porque o operando 3 é maior do que o operando 2. O valor true é transmitido para o operador menor do que junto com o operando 1. O seguinte código representa esse estado intermediário:
trace((true) < 1);
O operador menor do que converte o valor true no valor numérico 1 e compara esse valor numérico com o segundo operando 1 para retornar o valor false (o valor 1 não é menor que 1).
trace(1 < 1); // false
É possível alterar a associatividade à esquerda padrão com o operador parênteses. Você pode instruir o compilador a processar o operador menor do que primeiro, colocando esse operador e seus operandos entre parênteses. O exemplo a seguir usa o operador parênteses para produzir uma saída diferente usando os mesmos números que o exemplo anterior:
trace(3 > (2 < 1)); // true
O operador menor do que é processado primeiro, o que resulta em um valor false, porque o operando 2 não é menor que o operando 1. O valor false é transmitido para o operador maior do que junto com o operando 3. O seguinte código representa esse estado intermediário:
trace(3 > (false));
O operador maior do que converte o valor false no valor numérico 0 e compara esse valor numérico com o outro operando 3 para retornar o valor true (o valor 3 é maior que 0).
trace(3 > 0); // true
A tabela a seguir lista os operadores para o ActionScript 3.0 em ordem decrescente de precedência. Cada linha da tabela contém operadores de mesma precedência. Cada linha de operadores tem precedência sobre a linha que aparece abaixo dela na tabela.
Grupo
|
Operadores
|
Primário
|
[] {x:y} () f(x) new x.y x[y] <></> @ :: ..
|
Sufixo
|
x++ x--
|
Unário
|
++x --x + - ~ ! delete typeof void
|
Multiplicativo
|
* / %
|
Aditivo
|
+ -
|
Desvio em nível de bits
|
<< >> >>>
|
Relacional
|
< > <= >= as in instanceof is
|
Igualdade
|
== != === !==
|
AND em nível de bits
|
&
|
XOR em nível de bits
|
^
|
OR em nível de bits
|
|
|
AND lógico
|
&&
|
OR lógico
|
||
|
Condicional
|
?:
|
Atribuição
|
= *= /= %= += -= <<= >>= >>>= &= ^= |=
|
Vírgula
|
,
|