LinuxUser Programmieren (Vorschau)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
SCHWERPUNKT<br />
Javascript<br />
LISTING 1<br />
sprachen basieren im Kern auf namenlosen,<br />
an Variablen gebundene<br />
Funktionen (anonyme Funktionen<br />
oder Lambda-Funktionen<br />
genannt), die Sie auch als Parameter<br />
für Funktionen verwenden<br />
dürfen. Einen vollständigen Überblick<br />
über sämtliche Sprachelemente<br />
von Javascript mit Ausnahme<br />
der Objektorientierung<br />
finden Sie im Web [2].<br />
Nachhilfe gefragt<br />
Kaum ein Programmierer spricht<br />
die DOM-API heute noch direkt<br />
an: Zu sehr unterscheidet sich die<br />
Implementation von Browser zu<br />
Browser, obwohl die Zahl der Unterschiede<br />
in den letzten Jahren<br />
abgenommen hat. Von solchen<br />
Problemen abgesehen, ist das<br />
DOM an sich gesehen unhandlich<br />
und sperrig. Deswegen nutzen die<br />
meisten Programmierer die Bibliothek<br />
JQuery [3] als Zwischenschicht.<br />
Dieser einführende Artikel<br />
konzentriert sich ausschließlich<br />
auf diesen Ansatz.<br />
01 <br />
02 <br />
03 $(function(){ //ausführen, wenn Anzeige fertig<br />
04 var colors = ["red", "green", "blue", "yellow"];<br />
05 var names =["rot", "grün", "blau", "gelb"];<br />
06 var sayings = {<br />
07 "rot":"Rot steht für die Liebe.",<br />
08 "grün":"Grün sind die Bäume im Mai.",<br />
09 "blau":"Auch roter Wein macht blau.",<br />
10 "gelb":"Das Angesicht des Neids ist gelb."<br />
11 };<br />
12<br />
13 for (var i in colors){<br />
14 var div = $("");<br />
15 div.css({"height":"50px", "width":"150px",<br />
"background-color":colors[i]});<br />
16 div.addClass("colorbox");<br />
17 div.html(names[i]);<br />
18 $("body").append(div);<br />
19 }<br />
20<br />
21 $(".colorbox").on("click", function(){<br />
22 var clicked = $(this);<br />
23 var farbe = clicked.text();<br />
24 alert(sayings[farbe]);<br />
25 });<br />
26 });<br />
27 <br />
Das erste kleine Übungsprogramm<br />
fügt mithilfe einer Schleife vier<br />
farbige Boxen in eine leere Seite<br />
ein. Als Beispiel für Interaktivität<br />
öffnet ein Klick auf eine der Boxen<br />
einen Dialog mit einem abhängig<br />
von der Farbe wechselnden Text.<br />
Die Zeilen aus Listing 1 zeigen viele<br />
Grundzüge der Javascript-Programmierung.<br />
In Abbildung B sehen<br />
Sie das Ergebnis.<br />
Zeile 1 bindet die JQuery-Bibliothek<br />
ein, die beim Manipulieren<br />
des HTML-Codes zum Einsatz<br />
kommt. Enthält das Tag<br />
ein Attribut src, verweist<br />
es auf eine externe Javascript-<br />
Datei. In unserem Fall deutet die<br />
URL auf die von Google gehostete<br />
Version von JQuery, was den<br />
Download der Bibliothek erspart.<br />
Der zweite Script-Tag enthält<br />
kein entsprechendes Attribut.<br />
Dafür umschließt er direkt eingebetteten<br />
Programmcode. Der Typ<br />
text/javascript verweist in beiden<br />
Fällen auf die Sprache der eingebetteten<br />
Skripte.<br />
Im Zeichen des Dollars<br />
Gleich als erstes Zeichen des<br />
Java script-Codes springt das Dollarzeichen<br />
ins Auge. Über dieses<br />
sprechen Sie alle Funktionen von<br />
JQuery an. Die erste Zeile erweist<br />
sich für Neulinge oft als große<br />
Hürde in Bezug auf das Verständnis:<br />
Sie öffnet den JQuery-Aufruf<br />
$(), der erst vor dem schließenden<br />
Script-Tag endet.<br />
Damit hat es folgende Bewandtnis:<br />
Der Browser führt Javascript-<br />
Code, auf den er beim Parsen der<br />
HTML-Seite stößt, immer sofort<br />
aus. Dabei passiert es jedoch mitunter,<br />
dass der Browser mit der<br />
Anzeige der Seite noch nicht fertig<br />
ist. Wenn ein Skript dann versucht,<br />
auf Elemente der Seite zuzugreifen,<br />
scheitert es.<br />
Um dieses Problem zu vermeiden,<br />
kapselt die Funktion $() denjenigen<br />
Teil des Codes, den JQuery<br />
erst dann ausführt, wenn der<br />
Browser mit der Anzeige des<br />
HTML-Codes fertig ist. In unserem<br />
Beispiel umfasst $() den gesamten<br />
Code. Genau genommen<br />
umschließt es den Code nicht<br />
selbst, es erhält vielmehr als Parameter<br />
eine Funktion ohne Namen<br />
(anonyme Funktion, Lambda-<br />
Funktion), die den eigentlichen<br />
Programmcode enthält.<br />
Abgesehen von der Tatsache,<br />
dass der von der anonymen Funktion<br />
umschlossene Code garantiert<br />
erst dann abläuft, wenn der<br />
Browser die Seite komplett aufgebaut<br />
hat, ändert sich nichts an<br />
dessen Funktionalität.<br />
Anonym und doch präsent<br />
Anonyme Funktionen gehören zu<br />
den unverzichtbaren Bestandteilen<br />
von Javascript. Event-Handler,<br />
die auf die Eingabe von Benutzern<br />
reagieren, funktionieren<br />
ohne sie nicht (siehe Listing 1,<br />
Zeile 22). „Funktion ohne Namen“<br />
ist hier ganz wörtlich zu<br />
verstehen: Nach dem Schlüsselwort<br />
function folgen gleich die Parameter<br />
in runden Klammern (im<br />
Beispiel leer, weil es keine Parameter<br />
gibt). Lambda-Funktion<br />
verhalten sich genau wie einfache<br />
Werte (Zahlen oder Strings): Sie<br />
dürfen sie einer Variablen zuweisen<br />
oder einer Funktion als Parameter<br />
übergeben.<br />
Die ersten zwei Zeilen der anonymen<br />
Funktion definieren Arrays,<br />
die mehrere Strings aufnehmen.<br />
Array[Index] greift auf den<br />
Inhalt zu. Als Schlüssel eines Arrays<br />
sind nur null sowie positive<br />
Ganzzahlen erlaubt. Container<br />
mit Strings als Schlüssel, auch als<br />
assoziative Arrays oder in Perl als<br />
Hashes bekannt, heißen in Javascript<br />
Objekt. Zum Definieren<br />
solcher Objekte kommt die<br />
JSON-Schreibweise zum Einsatz<br />
(„Javascript Object Notation“),<br />
die inzwischen auch viele andere<br />
Sprachen nutzen.<br />
In JSON umschließen geschweifte<br />
Klammern eine mit<br />
Komma separierte Liste von<br />
Schlüssel-Werte-Paaren (Listing<br />
1, Zeile 7). Der Zugriff erfolgt<br />
in der von Java bekannten<br />
Dot-Notation: Objekt.Attributname.<br />
26 11 | 12<br />
www.linux-user.de