Einführung in Javascript
Da alle Skripte in todo4teams unter Verwendung von Javascript geschrieben werden, hier eine kurze Einführung in diese Programmiersprache.
Variablen-Deklaration
Mit einer Variablen-Deklaration wird eine Variable im aktuellen Gültigkeitsbereich erzeugt, d.h. als globale Variable oder lokale Funktionsvariable. Sie kann entweder ohne Wert installiert werden:
Oder der Anfangswert kann gleich angegeben werden:
Anstelle der 32 kann ein beliebiger Ausdruck stehen. Das Schema lautet also:
Kontrollstrukturen: Verzweigungen und Schleifen
Kontrollstrukturen sind Anweisungen, die wiederum Blöcke mit Anweisungen enthalten. Dazu gehört die bedingte Anweisung, auch if-Anweisung genannt.
println("Volljährig!");
} else {
println("Noch nicht volljährig.");
}
Zwischen den runden Klammern steht ein beliebiger Ausdruck, zwischen den geschweiften Klammern eine oder mehrere Anweisungen.
Mit der switch-Anweisung lassen sich Verzweigungen notieren, bei denen ein Wert mit vielen anderen Werten verglichen wird und eine entsprechende Anweisung ausgeführt wird.
Schleifen
Schleifen kann man in Javascript auf verschiedene Weisen ausdrücken:
Die while-Schleife
anweisungen;
}
oder die for-Schleife:
anweisungen;
}
Funktionen
Funktionen sind in JavaScript vollwertige Objekte. Sie haben Methoden und Eigenschaften, können erstellt und überschrieben, als Argumente an Funktionen übergeben und von ihnen erzeugt und zurückgegeben werden.
Nicht jedes Argument einer Funktion muss beim Aufruf angegeben werden, für fehlende Argumente wird der Wert undefined gesetzt. Es gibt in Javascript verschiedene Möglichkeiten eine Funktion zu erzeugen. Der einfachste Weg ist die Deklaration:
anweisungen;
return ausdruck;
}
Operatoren
Hier eine Übersicht über die Operatoren in Javascript:
Operator | Operandentyp | Durchgeführte Operation |
* | Zahlen | Multiplikation |
/ | Zahlen | Division |
+ | Zahlen oder Strings | Addition bzw. Stringverkettung |
– | Zahlen | Subtraktion |
% | Zahlen | Restbildung (Modulo-Operator) |
< | Zahlen oder Strings | Kleiner als |
<= | Zahlen oder Strings | Kleiner oder gleich |
> | Zahlen oder Strings | Größer als |
>= | Zahlen oder Strings | Größer oder gleich |
Beliebige Variable | Zuweisung | |
*= | Zahlenvariable | Zuweisung mit Multiplikation |
/= | Zahlenvariable | Zuweisung mit Division |
%= | Zahlenvariable | Zuweisung mit Restbildung |
+= | Zahlen- oder Stringvariable | Zuweisung mit Addition bzw. Stringverkettung |
–= | Zahlenvariable | Zuweisung mit Subtraktion |
<<= | Ganzzahlen-Variablen | Zuweisung mit Links-Shift |
>>>= | Ganzzahlen-Variablen | Zuweisung mit Rechts-Shift und 0-Auffüllung |
>>= | Ganzzahlen-Variablen | Zuweisung mit Rechts-Shift |
= | Elementare Typen | Gleich; identischer Wert |
≠ | Elementare Typen | Ungleich; ungleiche Werte |
& | Ganzzahlen | Bitweises UND |
| | Ganzzahlen | Bitweises ODER |
. | Objekt, Eigenschaft | Zugriff auf Eigenschaft |
[ ] | Array, Ganzzahl bzw. String | Zugriff auf Array-Element |
( ) | Funktion, beliebiger Parametertyp | Funktionsaufruf |
++ | Zahlvariable | Inkrement |
–– | Zahlvariable | Dekrement |
&& | Boolesche Werte | Logisches UND |
|| | Boolesche Werte | Logisches ODER |
^ | Ganzzahlen | Bitweises XOR |
~ | Ganzzahlen | Bitweises NICHT (bitweises Komplement) |
>>> | Ganzzahlen | Shift nach rechts mit 0-Auffüllung |
>> | Ganzzahlen | Links-Shift |
<< | Ganzzahlen | Rechts-Shift |
Arrays
Es gibt in Javascript zwei Wege, Arrays anzulegen:
Erzeugung durch literale Konstruktion
Der Datentyp muss nicht benannt werden. Der Javascript-Interpreter weiß, dass die eckigen Klammern ein Array erzeugen sollen:
Erzeugung durch den Array-Konstruktor
Der Unterschied zur ersten Methode ist gering. Runde Klammern ersetzen die eckigen Klammern und der Array-Konstruktor ist explizit aufgeführt.
farben = new Array("rot", "grün", "blau", "gelb", "grau");
Zugriff auf Arrayelemente
Ein Skript kann ein Array auch als leeres Arrays erzeugen, das später vom Programm mit Daten gefüllt wird.
var farben = new Array();
oder
farben = [];
Der Zugriff auf die Elemente des Arrays erfolgt über den Namen des Arrays und einen Index. Die folgenden Deklarationen initialisieren das Array.
farben[0] = "rot";
farben[1] = "grün";
farben[2] = "blau";
Das Zuweisen eines neuen Werts ändert ein Arrayelement:
farben[0] = "orange";
Die Größe des Arrays feststellen
Die Größe des Arrays entwickelt sich automatisch durch die Anzahl der belegten Elemente. Bei numerischen Arrays findet die Eigenschaft length heraus, wieviele Elemente das Array enthält: array.length.
array.length ist also immer eins mehr als der höchste Index. Der sicherste Weg, ein neues Element in ein Array einzubinden ist
var farben = ["rot", "grün", "blau"];
farben[farben.length] = "gelb";
Objekte
Jedes Objekt - auch ein literal erzeugtes Objekt - erbt vom Prototyp des globalen Objekt-Konstruktors.
Vordefinierte Objekte
JavaScript kennt mehrere eingebaute Objekte:
- Das namenlose globale Objekt, das alle Variablen und Objekte enthält.
- Object als allgemeiner Prototyp, von dem alle Objekte abgeleitet sind
- Function als Prototyp für Funktionen
- Array als Prototyp für Arrays
- String als Prototyp für Zeichenketten
- Boolean als Prototyp für Boolesche Variablen
- Number als Prototyp für Zahlen (64-Bit-Gleitkommazahlen gemäß IEEE 754)
- Math stellt Konstanten und Methoden für mathematische Operationen bereit. Math kann nicht als Konstruktor dienen.
- Date für Operationen mit Daten bzw. Zeitpunkten und Datumsformaten
- RegExp für reguläre Ausdrücke
Im hier verwendeten serverseitigen Javascript kann auch auf alle Objekte, die im Kontext an das Skript übergeben werden, zugegriffen werden.
Zugriff auf Objekteigenschaften und -methoden
Eigenschaften von Objekten (auch Methoden sind Eigenschaften) werden wie folgt angesprochen:
Punkt-Notation:
objekt.eigenschaft;
objekt.methode([Parameter]);
Neben der Punkt-Notation gibt es noch die Klammer-Notation, die jedoch weit weniger gebräuchlich ist.
Fehlerbehandlung
Die Anweisung try … catch … finally fängt Ausnahmen (exceptions), die aufgrund eines Fehlers oder einer throw-Anweisung auftreten, ab. Die Syntax ist wie folgt:
// Anweisungen, in denen Ausnahmen auftreten oder ausgelöst werden können
} catch (exception) {
// Anweisungsfolge, die im Ausnahmefall ausgeführt wird.
// In diesem Teil kann die Fehlerbehandlung erfolgen.
} finally {
// Anweisungsfolge, die anschließend in jedem Fall ausgeführt wird.
}
...
throw("sample exception");
Zu Beginn werden die Anweisungen im try-Block ausgeführt. Falls eine Ausnahme auftritt, wird der Kontrollfluss sofort zum catch-Block mit dem Ausnahmeobjekt als Parameter umgeleitet.
Im Normalfall wird der Ausnahmeblock übersprungen. Nach der Ausführung des try-Blocks (auch teilweise) und gegebenenfalls des catch-Blocks werden in jedem Fall die Anweisungen im finally-Block ausgeführt. Der finally-Teil kann weggelassen werden, alternativ der catch-Teil.