Open Source im professionellen Einsatz
Linux-Magazin 09/2014
945

Module importieren

Listing 6 zeigt, wie der Programmierer ein Modul benutzt. Das Schlüsselwort »import« erledigt in Zeile 1 das Einbinden. Die folgende, in geschweifte Klammern gefasste und kommaseparierte Liste bindet die Variable »pub« aus dem Modul an die Variable »a« sowie die Klasse »pubObj« an »Obj« . Die Referenzierung des Moduls erfolgt über dessen Dateinamen ohne die ».js« -Endung.

Listing 6

Importieren import-statement.html

01 import {pub as a, pubObj as Obj} from 'export-statement';
02 console.log((new Obj(1 + a)).inc);
03 console.log((new Obj(2 + a)).inc);
04 console.log(priv);

Der Konstruktor »new« in Zeile 2 von Listing 6 übergibt den Wert 4, jener in der nächsten Zeile den Wert 5 an die Konstruktor-Funktion aus Listing 5. Aus beiden instanzierten Objekten liest das Skript das Attribut »inc« aus. Das Attribut ergibt sich aus der Summe des an die Konstruktor-Funktion übergebenen Werts und dem Wert der privaten Variablen »priv« aus Listing 5. Da »priv« vor der Addition um 1 inkrementiert wird, schreibt der Code zunächst 5 und dann 7 auf die Browserkonsole.

Mit »Map« , »WeakMap« , »Set« und »WeakSet« bietet ECMA-Script 6 dem Programmierer vier neue Objekte zum Speichern von Daten. »Map« und »WeakMap« ähneln den Javascript-Objekten, denn sie speichern ebenfalls Schlüssel-Wert-Paare. Anders als herkömmliche Objekte sind Map-Objekte aber iterierbar. Zudem akzeptieren sie einen beliebigen Datentyp als Schlüssel. Der Unterschied zwischen »Map« und »WeakMap« liegt in der Speicherverwaltung: Nur in »WeakMap« -Objekten löscht der Garbage Collector Referenzen, die ihre Lebensdauer überschritten haben.

»Set« und »WeakSet« hingegen ähneln mathematischen Mengen. Sie speichern einen Wert oder eine Referenz nur einmal ab. Ein erneutes Hinzufügen bleibt folgenlos. »WeakSet« -Objekte behandelt der Garbage Collector wie »WeakMap« -Objekte. Auch »Set« - und »WeakSet« -Objekte sind iterierbar. Um sie einfach auslesen zu können, bietet ECMA-Script 6 die neu geschaffene For-of-Schleife. Da Traceur die vier oben besprochenen Objekte leider nicht unterstützt, iteriert diese Schleife in Listing 7 über ein Feld, denn auch Felder sind in ECMA-Script 6 von Haus aus iterierbar. Die For-of-Schleife schreibt in Zeile 2 die Werte 1, 3 und 5 auf die Browserkonsole.

Listing 7

For-of-Schleife for-of-statement.html

01 for (let x of [1, 3, 5]) {
02  console.log(x);
03 }

Iterator-Protokoll

Den Zugang zu iterierbaren Objekten findet die For-of-Schleife über das Iterator-Protokoll. Es erinnert wie viele andere Neuerungen stark an Python [8]. Um den Entwicklern die Implementierung des Iterator-Protokolls abzunehmen, bietet das neue ECMA-Script Generatorfunktionen. Diese ähneln formal konventionellen Funktionen, erzeugen aber das Iterator-Objekt. In Listing 8 iteriert die For-of-Schleife (Zeilen 8 bis 10) über den Aufruf der Generatorfunktion »sum« (Zeilen 1 bis 6). Auch die Definition dieser Generatorfunktion leitet das Schlüsselwort »function« ein. Der Sternchen-Operator unmittelbar vor ihrem Namen weist die Funktion als Generator aus.

Listing 8

Generator generator-functions.html

01 function *sum(array) {
02  var sum = 0;
03  for (var x of array) {
04   yield sum += x;
05  }
06 }
07
08 for (let x of sum([1, 2, 3, 4])) {
09  console.log(x);
10 }

Innerhalb dieser Funktion speichert die gleichnamige Variable »sum« ein Zwischenergebnis, Zeile 2 initialisiert sie mit 0. Die For-of-Schleife iteriert in den Zeilen 3 bis 5 über das dem Generator übergebene Feld, Zeile 4 addiert den aktuellen Feldwert zum Zwischenergebnis. Das Schlüsselwort »yield« veranlasst die Rückgabe des aktualisierten Zwischenergebnisses an den nächsten Durchlauf der For-of-Schleife. Für den nächsten Schleifendurchlauf setzt der Generator nach »yield« wieder ein.

Die For-of-Schleife macht sich auch in den so genannten Comprehensions (Mengendefinitionen) nützlich. Die Array-Comprehensions sind eine Möglichkeit, ganze Felder mit einem einzigen kompakten Ausdruck zu erzeugen. Der Ausdruck

[for (x of [2, 3]) for(y of [2, 3])Math.pow(x, y)]

beispielsweise generiert das Feld »[4, 8, 9, 27]« durch die verschachtelte Ausführung beider For-of-Schleifen über den Ausdruck »Math.pow(x, y)« . Verwendet der Programmierer umschließende runde Klammern, kann er mit Generator-Comprehensions iterierbare Objekte erzeugen. Über den Ausdruck

(for (x of [2, 3]) Math.pow(x, 2))

iteriert eine For-of-Schleife über die Werte 4 und 8. Ebenso kompakt und nützlich wie die Comprehensions sind so genannte Destructuring Assignments. Mit diesen besonderen Zuweisungen lassen sich in einem Ausdruck Objekte und Felder mit einfacher Syntax auslesen und gleichzeitig an mehrere Variablen binden. Die Anweisung »[b, a] = [a, b]« etwa vertauscht die Werte der beiden Variablen. Die Anweisung

var [a,,[b,,[c],d]] =[1, 0, [2, 0, [3, 0], 4], 0]

initialisiert die Variablen »a« bis »d« mit den Werten 1, 2, 3 und 4. Der Ausdruck links des Gleichheitszeichens legt sich wie eine Maske über das Feld rechts, überspringt Stellen mittels Komma und folgt dem Feld mittels eckiger Klammern in die Tiefe. Der ECMA-Script-Code

var {A: a, B: {C: b}} ={A: 1, B: {C: 2}, D: 3}

initialisiert analog die Variablen »a« mit 1 und »b« mit 2. Solche Destructuring Assignments kann der Programmierer auch in den Parameterlisten von Funktionen und in Schleifen verwenden.

Javascript ab ECMA-Script 6 kennt wie PHP Defaultparameter in der Parameterliste von Funktionsdefinitionen. Beim Aufruf der Funktion

function params(a=0, b=0){ return a+b}

initialisiert die Sprache »a« und »b« mit 0, falls keine Werte angegeben sind.

Zum Verarbeiten langer Parameterlisten bietet ECMA-Script 6 den Spreadoperator »...« . Der Aufruf »rest(1, 2, 3, 4, 5)« der Funktion »function rest(a, b, ...rest){}« veranlasst Javascript dazu, die Werte 3, 4 und 5 in das Feld namens »rest« zu packen. Der Spreadoperator lässt sich auch zum Entpacken von Feldern verwenden. In den Ausdruck »[1, 2, ...rest, 6]« fügen sich dabei die Werte des Feldes »rest« ein, sodass das Resultat »[1, 2, 3, 4, 5, 6]« lautet.

Neben den bisher besprochenen Neuerungen bringt ECMA-Script 6 noch eine Vielzahl neuer Methoden und einige neue Objekte, beispielsweise das »Promise« -Objekt. Eine vollständige Beschreibung würde allerdings den Rahmen dieses Artikels sprengen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • ECMA Script 6 angenommen

    ECMA International hat die vorgeschlagene Version ECMA Script 6 jetzt offiziell angenommen.

  • Javascript-Alternativen

    Javascript ist der Stoff, aus dem der Client-Teil vieler interaktiver Webanwendungen gemacht ist, schleppt aber Altlasten mit. Gegen die schreiben die Macher der vier vorgestellten Skriptsprachen an.

  • Angular 2

    Mit Typescript statt Javascript, JiT- und AoT-Kompilation und einem konsequenten Einsatz von Components brühen die Macher das Javascript-Framework Angular in Version 2 neu auf. Das Linux-Magazin probiert einen kräftigen Schluck von dem Gebräu.

  • Mit Vektoren zeichnen

    Bilder im Format Scalable Vector Graphics (SVG) brauchen weniger Speicherplatz und lassen sich ohne Qualitätsverlust skalieren. Selbst Animationen und Programmcode mit Javascript sind möglich, was den Standard fürs Web und den Desktop interessant macht.

  • Neue Webseite für Javascript-Test Sputnik

    Google hat eine Webseite online gebracht, mit der Anwender die Javascript-Testsammlung Sputnik im Browser ausführen können.

comments powered by Disqus

Ausgabe 08/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.