Kapitel 8 Ausdrücke und Operatoren
Werte mit Operanden und Operatoren bestimmen!
Ein Ausdruck wird in Flash an zahlreichen Stellen benötigt. Dazu zählen Anweisungen, die einen neuen Wert berechnen, und Bedingungen, die einen Wert überprüfen. Auch die Parameter für Funktionen und Methoden werden als Ausdrücke angegeben!
Häufig muss ein Wert berechnet werden, bevor Sie diesen als Parameter verwenden oder ihn in eine Variable packen. Manchmal möchten Sie einen Wert auch in eine Berechnung oder in einen Vergleich mit einbeziehen. Für diese Art von »Formeln« benötigen Sie Ausdrücke:
// Ausdruck als Anweisung
meineName = "Sascha";
// Ausdruck als Parameter
meinGewicht = parseFloat("70"+"."+"5");
// Ausdruck als Bedingung
if (alter<18) {
trace("Zutritt nicht erlaubt!");
}
8.1 Ausdrücke
Einfache Ausdrücke
Einfache Ausdrücke bestehen nur aus einem Operanden vom Typ Zahl, Zeichenkette, Wahrheitswerte, Objekte, null oder undefined. Anstelle von Werten dürfen auch Variablen, Eigenschaften, Funktionen und Methoden eingesetzt werden, die für einen entsprechenden Wert als Platzhalter stehen:
// Zahl als Parameter einer Methode
trace(Math.sin(2.5));
// Zeichenkette als Parameter einer Funktion
trace(parseFloat("123"+"."+"456"));
// Wahrheitswert als Parameter einer Methode
meinClip.startDrag(true);
// Objekt als Parameter einer Methode
meineInstanz.hitTest(deineInstanz);
Zusammengesetzte Ausdrücke
Zusammengesetzte Ausdrücke bestehen aus Operanden und Operatoren. Dabei gibt es einstufige Operatoren (unäre Operatoren), die sich auf nur einen Operanden beziehen. Hierzu zählen beispielsweise die Vorzeichen + und -, Inkrement und Dekrement (++ und --) sowie die Operatoren delete und typeof.
Operanden
Als Operanden sind einfache und zusammengesetzte Ausdrücke erlaubt:
// Vorzeichen
kontostand = -1000;
// Inkrement
trace(++kontostand);
// Datentyp
trace(typeof kontostand);
Die meisten Operatoren erfordern zwei Operanden. Dazu zählen die Zuweisungsoperatoren, mit denen einem Bezeichner ein Wert zugewiesen wird, und die arithmetischen Operatoren mit diversen Rechenarten:
ergebnis = 10 + 5;
alterInTagen = 29 * 365;
kompletterName = "Herr " + nachname;
preisInEuro = preisInDM / 1.95583;
meinMovieclip._x = zufall * 100;
transparenz = meinMovieclip._alpha / 2;
Um ganz genau zu sein, bestehen die vorhergehenden Beispiele sogar aus drei Operanden und zwei Operatoren. Der Operator mit dem höheren Vorrang verbindet dabei die umliegenden zwei Operanden zu einem Ausdruck, der einen Wert ergibt (10 + 5). Dieser Wert wird mit Hilfe des zweiten Operators mit dem übrig gebliebenen Operanden verbunden (ergebnis = 10 + 5).
Aufbau
Ein Ausdruck besteht also aus weiteren einfachen oder zusammengesetzten Ausdrücken. Dabei gilt grundsätzlich, dass jeder Ausdruck beliebig komplex werden darf, solange er in der folgenden Form aufgebaut ist:
|
Ein Ausdruck besteht aus einem Ausdruck und einem Operator (kontostand--). |
|
Ein Ausdruck besteht aus einem Operator und einem Ausdruck (typeof punkte). |
|
Ein Ausdruck besteht aus einem Ausdruck, einem Operator und einem Ausdruck (variable = wert). |
Mit Hilfe dieser wenigen Regeln lässt sich beinahe jeder noch so komplizierte Ausdruck in seine Bestandteile zerlegen. Ein Ausdruck der Form meinMovieclip._yscale = meinMovieclip._yscale / 2; besteht beispielsweise aus einem Ausdruck (meinMovieclip._yscale), der über einen Zuweisungsoperator mit einem weiteren Ausdruck (meinMovieclip._yscale / 2) verknüpft ist. Der zweite Ausdruck wiederum besteht aus zwei Ausdrücken, die über einen Divisions-Operator verbunden sind.
8.1.1 Operatoren
Die Liste der Operatoren in Flash ist sehr umfangreich und bietet eine Vielzahl an Möglichkeiten, die in diesem Buch in die folgenden Kategorien unterteilt sind:
|
Zuweisungsoperatoren |
|
Arithmetische Operatoren |
|
Vergleichsoperatoren |
|
Logische Operatoren |
|
Bitweise Operatoren |
|
Sonstige Operatoren |
8.1.2 Reihenfolge
Sobald mehrere Operatoren zum Einsatz kommen, muss wie in der Mathematik auf den Vorrang geachtet werden. Es gilt »Punktrechnung vor Strichrechnung« so wie in der folgenden Tabelle beschrieben.
Tabelle 8.1
Vorrang der Operatoren (von oben nach unten)
Operator
|
Beschreibung
|
( )
|
Gruppierung
|
+
|
Einstufiges Plus (Vorzeichen)
|
-
|
Einstufiges Minus (Vorzeichen)
|
~
|
Bit-Komplement
|
!
|
Logisches Nicht
|
not
|
Logisches Nicht (Flash 4)
|
++
|
Post-Inkrement
|
--
|
Post-Dekrement
|
( )
|
Funktionsaufruf
|
[ ]
|
Array-Element
|
.
|
Objektzugriffsoperator (Strukturelement)
|
++
|
Prä-Inkrement
|
--
|
Prä-Dekrement
|
{ }
|
Objektinitialisierung
|
new
|
Objekt zuweisen
|
delete
|
Objektzuweisung aufheben
|
typeof
|
Objekttyp
|
void
|
Gibt einen undefinierten Wert zurück
|
*
|
Multiplikation
|
/
|
Division
|
%
|
Modulo
|
+
|
Addition
|
add
|
Stringverkettung (früher &)
|
-
|
Subtraktion
|
<<
|
Bitweise Verschiebung nach links
|
>>
|
Bitweise Verschiebung nach rechts
|
>>>
|
Bitweise Verschiebung nach rechts (ohne Vorzeichen)
|
<
|
Kleiner als
|
<=
|
Kleiner als oder gleich
|
>
|
Größer als
|
>=
|
Größer als oder gleich
|
lt
|
Kleiner als (für Zeichenketten in Flash 4)
|
le
|
Kleiner oder gleich (für Zeichenketten in Flash 4)
|
gt
|
Größer als (für Zeichenketten in Flash 4)
|
ge
|
Größer oder gleich (für Zeichenketten in Flash 4)
|
==
|
Gleich
|
!=
|
Ungleich
|
===
|
Striktes Gleich
|
!==
|
Striktes Ungleich
|
eq
|
Gleich (für Zeichenketten in Flash 4)
|
ne
|
Ungleich (für Zeichenketten in Flash 4)
|
instanceof
|
Instanz von Prototyp
|
in
|
Eigenschaft von Instanz
|
&
|
Bitweises Und
|
^
|
Bitweises XOder
|
|
|
Bitweises Oder
|
&&
|
Logisches Und
|
and
|
Logisches Und (Flash 4)
|
||
|
Logisches Oder
|
or
|
Logisches Oder (Flash 4)
|
?:
|
Bedingt
|
=
|
Zuweisung
|
*=, /=, %=, +=, -=, &=, |=, ^=, <<=, >>=, >>>=
|
Zusammengesetzte Zuweisung
|
,
|
Mehrfache Auswertung
|
8.1.3 Bedingungen
In vielen Fällen werden Bedingungen benötigt, um z.B. den Programmablauf zu steuern. Dabei ist eine Bedingung nichts anderes als ein Ausdruck, der als Ergebnis einen Wahrheitswert in der Form true oder false liefert. Sollte ein Ausdruck keinen Wahrheitswert liefern, dann kann er dennoch als Bedingung verwendet werden, sofern die implizite Typkonvertierung einen sinnvollen Wahrheitswert liefert (siehe »Typumwandlung«, Seite 182).
In der Regel bestehen Bedingungen aus Vergleichen (siehe »Vergleichsoperatoren«, Seite 212), die bei komplexeren Ausdrücken mit logischen Operatoren verknüpft sind (siehe »Logische Operatoren«, Seite 224):
if (bedingung) {
// tu was
}
if (alter>80 && reichtum>1000000) {
heirate();
}
|