Operatoren

Operatoren zijn speciale functies die een of meer operanden gebruiken en een waarde retourneren. Een operand is een waarde (meestal een letterlijke waarde, een variabele of een expressie) die door een operator als invoer wordt gebruikt. Met de volgende code worden bijvoorbeeld de operatoren voor optellen (+) en vermenigvuldigen (*) gebruikt met drie letterlijke operanden (2, 3, en 4) om een waarde te retourneren. Deze waarde wordt vervolgens gebruikt door de toewijzingsoperator (=) om de geretourneerde waarde (14) toe te wijzen aan de variabele sumNumber.

var sumNumber:uint = 2 + 3 * 4; // uint = 14

Operatoren kunnen unair, binair of ternair zijn. Een unaire operator werkt met één operand. De operator voor verhogen (++) is bijvoorbeeld een unaire operator, omdat maar één operand wordt gebruikt. Een binaire operator werkt met twee operanden. De operator voor delen (/) werkt bijvoorbeeld met twee operanden. Een ternaire operator werkt met drie operanden. De voorwaardelijke operator (?:) werkt bijvoorbeeld met drie operanden.

Sommige operatoren zijn overbelast, wat betekent dat ze zich anders gedragen afhankelijk van het type of de hoeveelheid operanden die eraan worden doorgegeven. De operator voor optellen (+) is een voorbeeld van een overbelaste operator die zich anders gedraagt afhankelijk van het gegevenstype van de operanden. Als beide operanden getallen zijn, retourneert de operator voor optellen de som van de waarden. Als beide operanden tekenreeksen zijn, retourneert de operator voor optellen de samenvoeging van de twee operanden. De volgende voorbeeldcode laat zien hoe de operator zich anders gedraagt afhankelijk van de operanden:

trace(5 + 5); // 10 
trace("5" + "5"); // 55

Operatoren kunnen zich ook anders gedragen op basis van het aantal gebruikte operanden. De operator voor aftrekken (-) is zowel een unaire als binaire operator. Met één operand maakt de operator voor aftrekken de operand negatief en retourneert het resultaat. Met twee operanden retourneert de operator voor aftrekken het verschil tussen de operanden. In het volgende voorbeeld wordt de operator voor aftrekken eerst als unaire operator gebruikt en vervolgens als binaire operator.

trace(-3); // -3 
trace(7 - 2); // 5

Operatorprioriteit en associatie

Operatorprioriteit en operatorassociatie bepalen de volgorde waarin operatoren worden uitgevoerd. Hoewel het vanzelfsprekend is voor personen die bekend zijn met wiskunde of eenvoudig programmeren dat de compiler de operator voor vermenigvuldigen (*) uitvoert vóór de operator voor optellen (+), heeft de compiler expliciete instructies nodig over welke operatoren eerst moeten worden uitgevoerd. Dergelijke instructies worden gezamenlijk operatorprioriteit genoemd. ActionScript definieert een standaardoperatorprioriteit die u kunt wijzigen door de ronde-haakjesoperator (()) te gebruiken. Met de volgende code wordt bijvoorbeeld de standaardprioriteit in het vorige voorbeeld gewijzigd, zodat de compiler wordt gedwongen de operator voor optellen te verwerken vóór de operator voor vermenigvuldigen:

var sumNumber:uint = (2 + 3) * 4; // uint == 20

Er kunnen situaties voorkomen waarin twee of meer operatoren met dezelfde prioriteit worden weergegeven in dezelfde expressie. In deze gevallen gebruikt de compiler de regels van associatie om te bepalen welke operator het eerst moet worden uitgevoerd. Alle binaire operatoren, behalve de toewijzingsoperatoren, hebben associatie naar links, wat betekent dat operatoren aan de linkerkant eerder worden uitgevoerd dan operatoren aan de rechterkant. De toewijzingsoperatoren en de voorwaardelijke operator ?: hebben associatie naar rechts, wat betekent dat operatoren aan de rechterkant eerder worden uitgevoerd dan operatoren aan de linkerkant.

Neem bijvoorbeeld de operatoren kleiner dan (<) en groter dan (>), die dezelfde prioriteit hebben. Als beide operatoren in dezelfde expressie worden gebruikt, wordt de operator aan de linkerkant eerst uitgevoerd, omdat beide operatoren associatie naar links hebben. Dit betekent dat de volgende twee instructies dezelfde uitvoer produceren:

trace(3 > 2 < 1); // false 
trace((3 > 2) < 1); // false

De operator groter dan wordt eerst uitgevoerd, wat resulteert in de waarde true, omdat de operand 3 groter is dan de operand 2. De waarde true wordt vervolgens doorgegeven aan de operator kleiner dan, samen met de operand 1. De volgende code vertegenwoordigt deze tussenstatus:

trace((true) < 1); 

De operator kleiner dan zet de waarde true om in de numerieke waarde 1 en vergelijkt die numerieke waarde met de tweede operand 1 om de waarde false te retourneren (de waarde 1 is niet kleiner dan 1).

trace(1 < 1); // false

U kunt de standaardassociatie naar links wijzigen met de ronde-haakjesoperator. U kunt de compiler opgeven de operator kleiner dan eerst te verwerken door die operator en de operanden ervan tussen ronde haakjes te plaatsen. In het volgende voorbeeld wordt de ronde-haakjesoperator gebruikt om een andere uitvoer te produceren met dezelfde getallen als in het vorige voorbeeld:

trace(3 > (2 < 1)); // true

De operator kleiner dan wordt eerst uitgevoerd, wat resulteert in de waarde false, omdat de operand 2 niet kleiner is dan de operand 1. De waarde false wordt vervolgens doorgegeven aan de operator groter dan, samen met de operand 3. De volgende code vertegenwoordigt deze tussenstatus:

trace(3 > (false)); 

De operator groter dan zet de waarde false om in de numerieke waarde 0 en vergelijkt die numerieke waarde met de andere operand 3 om de waarde true te retourneren (de waarde 3 is groter dan 0).

trace(3 > 0); // true

De volgende tabel bevat een lijst met operatoren voor ActionScript 3.0 in volgorde van afnemende prioriteit. Elke rij van de tabel bevat operatoren met dezelfde prioriteit. Elke rij operatoren heeft een hogere prioriteit dan de volgende rij in de tabel.

Groep

Operatoren

Primair

[] {x:y} () f(x) new x.y x[y] <></> @ :: ..

Postfix

x++ x--

Unair

++x --x + - ~ ! delete typeof void

Multiplicatief

* / %

Additief

+ -

Bitsgewijs verplaatsen

<< >> >>>

Relationeel

< > <= >= as in instanceof is

Gelijkheid

== != === !==

Bitsgewijze AND

&

Bitsgewijze XOR

^

Bitsgewijze OR

|

Logische AND

&&

Logische OR

||

Voorwaardelijk

?:

Toewijzing

= *= /= %= += -= <<= >>= >>>= &= ^= |=

Komma

,

Primaire operatoren

De primaire operatoren omvatten de operatoren die worden gebruikt voor het maken van letterlijke tekens voor arrays en objecten, groeperen van expressies, aanroepen van functies, instantiëren van klasseninstanties en de toegang tot eigenschappen.

Alle primaire operatoren in de volgende tabel hebben dezelfde prioriteit. Operatoren die deel uitmaken van de E4X-specificatie worden aangeduid met de notatie (E4X).

Operator

Bewerking die wordt uitgevoerd

[]

Initialiseert een array

{x:y}

Initialiseert een object

()

Groepeert expressies

f(x)

Roept een functie aan

new

Roept een constructor aan

x.y x[y]

Zorgt voor toegang tot een eigenschap

<></>

Initialiseert een object XMLList (E4X)

@

Initialiseert een attribuut (E4X)

::

Kwalificeert een naam (E4X)

..

Zorgt voor toegang tot een afstammend XML-element (E4X)

Postfix-operatoren

Postfix-operatoren richten zich op één operator en verhogen of verlagen de waarde. Hoewel deze operatoren unair zijn, worden zij apart van de andere unaire operatoren geclassificeerd vanwege hun hogere prioriteit en speciale gedrag. Als u een postfix-operator als deel van een grotere expressie gebruikt, wordt de waarde van de expressie geretourneerd voordat de postfix-operator wordt verwerkt. De volgende code toont bijvoorbeeld dat de waarde van expressie xNum++ wordt geretourneerd voordat de waarde wordt verhoogd.

var xNum:Number = 0; 
trace(xNum++); // 0 
trace(xNum); // 1

Alle postfix-operatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

++

Verhoogt (postfix)

--

Verlaagt (postfix)

Unaire operatoren

Unaire operatoren richten zich op één operand. De operatoren ++ (verhogen) en -- (verlagen) in deze groep zijn prefix-operatoren, wat betekent dat zij worden weergegeven vóór de operand in een expressie. Prefix-operatoren verschillen van de postfix-operatoren, omdat de verhogende of verlagende bewerking wordt uitgevoerd voordat de waarde van de gehele expressie wordt geretourneerd. De volgende code toont bijvoorbeeld hoe de waarde van de expressie ++xNum wordt geretourneerd nadat de waarde wordt verhoogd:

var xNum:Number = 0; 
trace(++xNum); // 1 
trace(xNum); // 1

Alle unaire operatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

++

Verhoogt (prefix)

--

Verlaagt (prefix)

+

Unair +

-

Unair - (negatie)

!

Logische NOT

~

Bitsgewijze NOT

delete

Verwijdert een eigenschap

typeof

Retourneert informatie omtrent het type

void

Retourneert een ongedefinieerde waarde

Multiplicatieve operatoren

Multiplicatieve operatoren richten zich op twee operanden en voeren de berekeningen vermenigvuldigen, delen en restbepaling bij deling uit.

Alle multiplicatieve operatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

*

Vermenigvuldigen

/

Delen

%

Restbepaling bij deling

Additieve operatoren

Additieve operatoren richten zich op twee operanden en voeren de berekeningen optellen of aftrekken uit. Alle additieve operatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

+

Optellen

-

Aftrekken

Operatoren voor bitsgewijs verplaatsen

Operatoren voor bitsgewijs verplaatsen richten zich op twee operanden en verplaatsen de bits van de eerste operand met het aantal plaatsen opgegeven door de tweede operand. Alle operatoren voor bitsgewijs verplaatsen in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

<<

Bitsgewijs naar links verplaatsen

>>

Bitsgewijs naar rechts verplaatsen

>>>

Bitsgewijs zonder teken naar rechts verplaatsen

Relationele operatoren

Relationele operatoren richten zich op twee operanden, vergelijken de waarden hiervan en retourneren een Booleaanse waarde. Alle relationele operatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

<

Kleiner dan

>

Groter dan

<=

Kleiner dan of gelijk aan

>=

Groter dan of gelijk aan

as

Controleert het gegevenstype

in

Controleert de objecteigenschappen

instanceof

Controleert de prototypeketen

is

Controleert het gegevenstype

Gelijkheidsoperatoren

Gelijkheidsoperatoren richten zich op twee operanden, vergelijken de waarden hiervan en retourneren een Booleaanse waarde. Alle gelijkheidsoperatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

==

Gelijkheid

!=

Ongelijkheid

===

Strikte gelijkheid

!==

Strikte ongelijkheid

Bitsgewijze logische operatoren

Bitsgewijze logische operatoren richten zich op twee operanden en voeren logische handelingen uit op bitniveau. De prioriteit van bitsgewijze logische operatoren verschilt. De operatoren worden, gesorteerd op aflopende prioriteit, weergegeven in de volgende tabel:

Operator

Bewerking die wordt uitgevoerd

&

Bitsgewijze AND

^

Bitsgewijze XOR

|

Bitsgewijze OR

Logische operatoren

Logische operatoren richten zich op twee operanden en retourneren als resultaat een Booleaanse waarde. De prioriteit van logische operatoren verschilt. De operatoren worden, gesorteerd op aflopende prioriteit, weergegeven in de volgende tabel:

Operator

Bewerking die wordt uitgevoerd

&&

Logische AND

||

Logische OR

Voorwaardelijke operator

De voorwaardelijke operator is een ternaire operator, wat betekent dat deze zich op drie operanden richt. De voorwaardelijke operator is een snelle methode om de voorwaardelijke instructie ifelse toe te passen.

Operator

Bewerking die wordt uitgevoerd

?:

Voorwaardelijk

Toewijzingsoperatoren

Toewijzingsoperatoren richten zich op twee operanden en wijzen een waarde toe aan een operand, gebaseerd op de waarde van de andere operand. Alle toewijzingsoperatoren in de volgende tabel hebben dezelfde prioriteit:

Operator

Bewerking die wordt uitgevoerd

=

Toewijzing

*=

Vermenigvuldigen en toewijzen

/=

Delen en toewijzen

%=

Restbepaling bij deling en toewijzen

+=

Optellen en toewijzen

-=

Aftrekken en toewijzen

<<=

Bitsgewijs naar links verplaatsen en toewijzen

>>=

Bitsgewijs naar rechts verplaatsen en toewijzen

>>>=

Bitsgewijs zonder teken naar rechts verplaatsen en toewijzen

&=

Bitsgewijs AND en toewijzen

^=

Bitsgewijs XOR en toewijzen

|=

Bitsgewijs OR en toewijzen