Sie sind hier
E-Book

JavaScript für Java-Entwickler

AutorOliver Zeigermann
Verlagentwickler.press
Erscheinungsjahr2015
Seitenanzahl138 Seiten
ISBN9783868023428
FormatePUB/PDF
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis9,99 EUR
Das Buch 'JavaScript für Java-Entwickler' führt anhand von vielen Codebeispielen in die Grundlagen der Programmiersprache JavaScript ein. Dabei wird besonders auf Patterns eingegangen, die die Entwicklung mit JavaScript im größeren Rahmen ermöglichen. Diese Auflage enthält nun auch die wichtigsten Neuerungen der Sprache in ihrer Version ECMAScript 2015. In einem zusätzlichen Kapitel werden zudem die Grundlagen und Vorteile der JavaScript-Erweiterung TypeScript erläutert, die ebenfalls besonders bei größeren Projekten zum Tragen kommen. Zielpublikum sind Java-Entwickler, die sich in so kurzer Zeit wie möglich der Sprache JavaScript nähern wollen. Deshalb wird alles weggelassen, was man als Java-Entwickler ohnehin schon weiß. Zudem werden Vergleiche zu bereits bekannten Konzepten aus dem Java-Bereich gezogen.

Oliver Zeigermann programmiert seit über dreißig Jahren in unterschiedlichen Programmiersprachen. Trotz anfänglichem Widerwillen programmiert er seit 2010 auch in JavaScript. Nun freut er sich, in einer Sprache programmieren zu können, die auf beinahe jeder Plattform läuft.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

3 Funktionen

Funktionen sind eines der mächtigsten und komplexesten Sprachkonstrukte von JavaScript. Wie wir in den folgenden Kapiteln sehen werden, basieren sogar die Patterns für Klassen und Module auf Funktionen.

3.1 Bürger erster Klasse

Eine Funktion definiert ihr in JavaScript mit dem Schlüsselwort function. Dann folgen der Name der Funktion, Klammern für die deklarierten Parameter sowie ein Block für den Funktionskörper. Das Ganze könnte z.B. so aussehen:

function meineErsteFunktion() {
console.log("Toll!");
}
// Dazu der passende Aufruf:
meineErsteFunktion();
// => Toll!

Funktionen können auch anonym sein und haben dann keinen Namen. Das ist nur dann sinnvoll, wenn ihr sie direkt ausführt oder einer Variablen zuweist. Den Sinn der direkten Ausführung sehen wir weiter hinten in diesem Kapitel, hier erst einmal die Zuwei­sung an eine Variable:

var meineZweiteFunktion = function () {
console.log("Auch toll!");
};
meineZweiteFunktion();
// => Auch toll!

Vielleicht ist euch das Semikolon am Ende der Zuweisung aufgefallen? Ja, das Ganze ist nun zu einem Statement geworden, und Statements sollen ja laut Tipp aus dem letzten Kapitel mit einem Semikolon beendet werden.

Hinweis: Funktionen sind Objekte und können als solche einer Variablen zugewiesen oder als Parameter übergeben werden.

Hält eine Variable eine Referenz auf eine Funktion, ist die Funkti­on darüber mit dem ()-Operator aufrufbar.

3.2 Sichtbarkeitsbereiche (Scopes)

Wie in Kapitel 2 gesehen, spannen Blöcke in JavaScript im Gegensatz zu Java und vielen anderen Programmiersprachen keine Sichtbarkeitsbereiche auf. Zur kurzen Wiederholung: Hier gibt es zwar einen Block, allerdings ist auch nach Beendigung des Blocks die darin definierte Variable a noch sichtbar:

{
var a = 10;
}
// Hoppla!
console.log(a);
// => 10

Um Sichtbarkeitsbereiche zu definieren, gibt es in JavaScript ein anderes Konstrukt:

(function () {
var b = 10;
console.log("Noch bin ich da: " + b);
})();
console.log(typeof b);
// => undefined

Was passiert hier? Erst einmal definieren wir eine anonyme Funktion, also eine Funktion ohne Namen. Diese führen wir sofort mit () aus. Das weitere Klammerpaar um die Funktionsdefinition herum ist nur aus syntaktischen Gründen notwendig.

Da Funktionen Sichtbarkeitsbereiche aufspannen, ist die Variable b nach der Ausführung der Funktion nicht mehr sichtbar, und wir haben erreicht, was wir wollten. Dieses Pattern ist auch unter dem Namen IIFE für Immediately-Invoked Function Expression bekannt [1].

Manchmal sieht man das IIFE-Pattern mit einer leicht anderen Klammerung. Diese leicht andere Syntax ist jedoch äquivalent zu unserer Version oben:

(function () {
var b = 10;
console.log("Noch bin ich da: " + b);
}());
console.log(typeof b);
// => undefined

Sichtbarkeitsbereiche können beliebig tief geschachtelt werden. Aus jedem inneren Sichtbarkeitsbereich kommt ihr an alle Parameter und Variablen aller äußeren Sichtbarkeitsbereiche, nicht aber anders herum.

Ein bisschen mehr dazu könnt ihr in Kapitel 5 finden, in dem wir uns auch mit dem Konzept einer Closure beschäftigen. Hier erst einmal ein einfaches Beispiel für verschachtelte Sichtbarkeitsberei­che:

(function () {
var b = 10;
console.log(b); // => 10
(function () {
var c = "c";
console.log(c); // => "c"
console.log(b); // => 10
})();
console.log(typeof c);
// => undefined
})();

3.3 Strict Mode

Beim Definieren von lokalen Variablen und Sichtbarkeitsberei­chen kann man gerade als JavaScript-Anfänger viele Fehler ma­chen. Hilfreich kann dabei der in ECMAScript5 eingeführte so genannte Strict Mode [2] sein. In diesem Modus gelten strengere Regeln für ein gültiges JavaScript-Programm.

Ihr könnt den Modus entweder für eine ganze Datei oder für ein­zelne Funktionen aktivieren. Dazu fügt ihr einen einfachen String mit dem Text strict mode ein. Für eine ganze Datei schreibt man dies an deren Anfang, für eine Funktion als Erstes in den Körper der Funktion. So würde dann der Anfang jeder eurer JavaScript-Dateien aussehen:

"use strict";
// ... Hier kommt der eigentliche JavaScript-Inhalt

Und so würde die Aktivierung für eine einzelne Funktion aussehen:

function strikteFunktion() {
"use strict";
// ... Weiterer Funktionskörper
}

Was bewirkt der Modus nun? Fangen wir mit dem klassischen Beispiel an, das von JavaScript-Gegnern angeführt wird, um die Minderwertigkeit von JavaScript zu beweisen. Tatsächlich ma­chen viele Programmierer aus einem Java-Umfeld diesen Fehler mindestens einmal. Der folgende Code ...

function aha() {
hugo = 10;
console.log(hugo);
}
aha();
// => 10
console.log(hugo);
// => 10

... tut, was er tun soll, definiert aber auch versehentlich die globale Variable hugo, da hier das var-Schlüsselwort fehlt. Dieser Code gibt also zweimal 10 aus, obwohl der Autor des Codes hugo eigentlich als lokale Variable definieren wollte. Dazu fehlt aber das Schlüsselwort var vor der Variable hugo. Richtig würde der Code nun so aussehen, und das zweite console.log gibt richtigerweise eine Fehlermeldung aus:

function aha() {
var hugo = 10;
console.log(hugo);
}
aha(); // => 10
console.log(hugo);
// => Uncaught ReferenceError: hugo is not defined

Hätten wir den Strict Mode auf dem ursprünglichen Code akti­viert, wäre der Fehler sofort aufgefallen, und schon der erste Zu­griff auf hugo hätte die obige Fehlermeldung gegeben. In etwa so:

"use strict";
function aha() {
hugo = 10;
// => Uncaught ReferenceError: hugo is not defined
console.log(hugo);
}
aha();

Dies ist nur ein Beispiel für eine ganze Reihe von wenig sinnvollem oder gefährlichem Code, den der Strict Mode verbietet. Mehr dazu unter [2]. Zudem reserviert der Strict Mode einige Keywords, die in späteren Versionen von ECMAScript Einzug halten. So wird eine leichte Migration gewährleistet.

Ein Konstrukt, das wir bisher gar nicht erwähnt haben, ist das with-Statement [3]. Für einen with-Block gibt man ein Objekt an. Wenn möglich, werden in diesem Block alle unqualifizierten Variablenzugriffe auf diesem Objekt ausgeführt. Ihr solltet dieses Konstrukt nicht verwenden, da es zu schwer lesbarem Code führt. Im Strict Mode ist es sogar verboten.

Hinweis: Es ist Best Practice, den Strict Mode überall auf Funktionsebene einzuschalten.

3.4 Parameter

Bisher hatten unsere Funktionen keine Parameter und keine Rückgabewerte. Parameter bergen für Java-Programmierer einige Überraschungen, denn ihre Verwendung unterschei­det sich von der in Java. Schauen wir uns dazu das folgende Beispiel an:

function incr(num) {
return num + 1;
}

Diese Funktion deklariert einen Parameter mit dem Namen num und liefert mit return ein Ergebnis zurück. Im Gegensatz zu anderen Sprachen mit funktionalen Elementen erfordern Rückgaben in JavaScript das return-Schlüsselwort. Es ist nicht so, dass der letzte Ausdruck einer Funktion implizit als Rückgabe verwendet wird. Dieses Verhalten ist genauso wie in Java. Im Unterschied zu Java können allerdings weder für Parameter noch für den Rückgabewert Typen angegeben werden.

Dokumentation

Das Fehlen von deklarierten Typen führt im schlimmsten – und durchaus nicht außergewöhnlichen – Fall dazu, dass man bei jedem Aufruf einer Methode vorher den aufzurufenden Code analysieren muss, um herauszufinden, was man eigentlich übergeben sollte. Das ist nicht so lustig, daher ist eine konsequente Dokumentation von Funktionen, die als API dienen, noch wichtiger als in Java.

Hinweis: Alle Funktionen, die als API dienen, sollten konsequent mit JSDoc dokumentiert werden.

Eine gute Dokumentation unserer Funktion mit dem bereits in Kapitel 2 erwähnten JSDoc-Format könnte so aussehen:

/**
* Erhöht die Eingabe um 1.
*
* @param {number} num die Eingabe
* @returns {number} die um 1 erhöhte Eingabe
*/
function incr(num) {
return num + 1;
}

Neu sind die geschweiften Klammern {}, in denen sich die Typ­information der Parameter und der Rückgabe befinden – in diesem Fall number.

Diese Angaben sind erst einmal informell, d.h. das Zielpublikum ist der Programmierer, der die Funktion verwenden will. Es gibt allerdings Werkzeuge, die diese Kommentare für einen statischen Check nutzen. Der bekannteste und am meisten verbreitete Vertreter ist Googles Closure Compiler [4], der schon im vorherigen Kapitel erwähnt wurde.

Optionale Parameter...

Blick ins Buch
Inhaltsverzeichnis
Inhaltsverzeichnis5
Kapitel 1 – Einleitung9
Kapitel 2 – Grundlagen13
2.1 Hallo Welt13
2.2 Typen16
2.3 Variablen24
2.4 Syntax26
2.5 == vs. ===29
2.6 undefined vs. null30
2.7 Kontrollstrukturen32
2.8 Exceptions35
Kapitel 3 – Funktionen39
3.1 Bürger erster Klasse39
3.2 Sichtbarkeitsbereiche (Scopes)40
3.3 Strict Mode42
3.4 Parameter44
3.5 Funktionen höherer Ordnung49
3.6 Hoisting51
Kapitel 4 – Objekte, Klassen, Prototypen und Vererbung55
4.1 Prototypische Vererbung55
4.2 Klassen58
4.3 Vererbung62
Kapitel 5 – Closures und Module67
5.1 Closures67
5.2 Das Revealing Module Pattern70
5.3 Standardformate für Module71
Kapitel 6 – Fortgeschrittene Themen75
6.1 Wie wird „this“ gebunden?75
6.2 Weitere OO-Patterns81
6.3 JSON84
6.4 Reguläre Ausdrücke85
Kapitel 7 – ECMAScript 2015 aka ES687
7.1 Ablaufumgebungen87
7.2 Block Scope88
7.3 Spracherweiterungen91
7.4 Klassen und erweiterte Objektliterale94
7.5 Module, Exporte und Importe100
7.6 Erweiterungen bei Funktionen103
7.7 Iteratoren und for..of107
7.8 Weitere Eigenschaften109
Kapitel 8 – Einführung in TypeScript117
8.1 Einführung117
8.2 Typen und Interfaces121
8.3 Erweiterungen für Klassen127
8.4 Generics128
8.5 Namespaces und Module129
8.6 Was noch?131
Stichwortverzeichnis135

Weitere E-Books zum Thema: Informatik - Algorithmen - Softwaresysteme

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Software Engineering

E-Book Software Engineering
Architektur-Design und Prozessorientierung Format: PDF

Das Lehrbuch behandelt alle Aspekte der Software-Entwicklung, besonders aber Methoden und Richtlinien zur Herstellung großer und qualitativ hochwertiger Softwareprodukte. Es vermittelt das zur…

Software Engineering

E-Book Software Engineering
Architektur-Design und Prozessorientierung Format: PDF

Das Lehrbuch behandelt alle Aspekte der Software-Entwicklung, besonders aber Methoden und Richtlinien zur Herstellung großer und qualitativ hochwertiger Softwareprodukte. Es vermittelt das zur…

Weitere Zeitschriften

Berufsstart Bewerbung

Berufsstart Bewerbung

»Berufsstart Bewerbung« erscheint jährlich zum Wintersemester im November mit einer Auflage von 50.000 Exemplaren und ermöglicht Unternehmen sich bei Studenten und Absolventen mit einer ...

Card Forum International

Card Forum International

Card Forum International, Magazine for Card Technologies and Applications, is a leading source for information in the field of card-based payment systems, related technologies, and required reading ...

cards Karten cartes

cards Karten cartes

Die führende Zeitschrift für Zahlungsverkehr und Payments – international und branchenübergreifend, erscheint seit 1990 monatlich (viermal als Fachmagazin, achtmal als ...

dental:spiegel

dental:spiegel

dental:spiegel - Das Magazin für das erfolgreiche Praxisteam. Der dental:spiegel gehört zu den Top 5 der reichweitenstärksten Fachzeitschriften für Zahnärzte in Deutschland (laut LA-DENT 2011 ...

Der Steuerzahler

Der Steuerzahler

Der Steuerzahler ist das monatliche Wirtschafts- und Mitgliedermagazin des Bundes der Steuerzahler und erreicht mit fast 230.000 Abonnenten einen weitesten Leserkreis von 1 ...