Priorytet i łączność operatorów decydują o kolejności ich przetwarzania. Mimo że dla każdego, kto uczył się arytmetyki, oczywistością jest, że kompilator powinien wykonywać operację mnożenia (
*
) przed operacją dodawania (
+
), to kompilator i tak musi otrzymać jednoznaczne instrukcje co do kolejności przetwarzania. Instrukcje takie nazywamy łącznie
priorytetem operatorów
. W języki ActionScript zdefiniowany jest domyślny priorytet operatorów, który programista może zmienić, korzystając z nawiasów (
()
). Na przykład poniższy kod modyfikuje domyślny priorytet (obowiązujący w poprzednim przykładzie), aby wymusić na kompilatorze przetworzenie operatora dodawania przed operatorem mnożenia:
var sumNumber:uint = (2 + 3) * 4; // uint == 20
Zdarza się, że w jednym wyrażeniu występują dwa lub większa liczba operatorów o tym samym priorytecie. W takich przypadkach kompilator stosuje zasady
łączności
w celu określenia kolejności przetwarzania operatorów. Wszystkie operatory dwuargumentowe, z wyjątkiem operatorów przypisania, są
lewostronne
, co oznacza, że operatory po lewej stronie są przetwarzane przed operatorami po prawej stronie. Operatory przypisania i operator warunkowy (
?:
) są
prawostronne
, co oznacza, że operatory po prawej stronie są przetwarzane przed operatorami po lewej stronie.
Rozważmy na przykład operator mniejszości(
<
) i większości (
>
), które mają ten sam priorytet. Jeśli oba operatory zostaną użyte w tym samym wyrażeniu, operator po lewej stronie zostanie przetworzony jako pierwszy, ponieważ oba operatory są lewostronne. Oznacza to, że następujące dwie instrukcje dadzą ten sam wynik:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
W pierwszej kolejności przetwarzany jest operator większości, co daje w wyniku wartość
true
, ponieważ operand 3 jest większy od operandu 2. Wartość
true
jest następnie przekazywana do operatora mniejszości wraz z operandem 1. Poniższy kod odzwierciedla ten stan pośredni:
trace((true) < 1);
Operator mniejszości konwertuje wartość
true
na wartość liczbową 1 i porównuje tę wartość liczbową z drugim operandem 1, co w wyniku daje wartość
false
(ponieważ 1 nie jest mniejsze od 1).
trace(1 < 1); // false
Nawiasy umożliwiają domyślnej łączności lewostronnej. Można nakazać kompilatorowi, by przetwarzał operator mniejszości w pierwszej kolejności. W tym celu należy ująć ten operator i jego operandy w nawiasy. W poniższym przykładzie w wyniku zastosowania nawiasów generowany jest inny wynik na podstawie tych samych wartości liczbowych:
trace(3 > (2 < 1)); // true
W pierwszej kolejności przetwarzany jest operator mniejszości, co daje w wyniku wartość
false
, ponieważ operand 2 jest nie mniejszy od operandu 1. Wartość
false
jest następnie przekazywana do operatora większości wraz z operandem 3. Poniższy kod odzwierciedla ten stan pośredni:
trace(3 > (false));
Operator większości konwertuje wartość
false
na wartość liczbową 0 i porównuje tę wartość liczbową z drugim operandem, 3, zwracając w wyniku
true
(wartość 3 jest większa od 0).
trace(3 > 0); // true
W poniższej tabeli wymieniono operatory języka ActionScript 3.0 w kolejności malejących priorytetów. Każdy wiersz tabeli zawiera operatory o tym samym priorytecie. Operatory w danym wierszu mają wyższy priorytet niż operatory w niższym wierszu tabeli.
Grupa
|
Operatory
|
Podstawowe
|
[] {x:y} () f(x) new x.y x[y] <></> @ :: ..
|
Przyrostkowe
|
x++ x--
|
Jednoargumentowe
|
++x --x + - ~ ! delete typeof void
|
Multiplikatywne
|
* / %
|
Addytywne
|
+ -
|
Przesunięcia bitowego
|
<< >> >>>
|
Relacyjne
|
< > <= >= as in instanceof is
|
Równość
|
== != === !==
|
Bitowe AND
|
&
|
Bitowe XOR
|
^
|
Bitowe OR
|
|
|
Logiczne AND
|
&&
|
Logiczne OR
|
||
|
Warunkowe
|
?:
|
Przypisanie
|
= *= /= %= += -= <<= >>= >>>= &= ^= |=
|
Przecinek
|
,
|