67
Warum ES6 die Welt ein Stückchen besser macht Karin Jung / pixelio.de

Warum ECMAScript 6 die Welt ein Stückchen besser macht

Embed Size (px)

DESCRIPTION

Wo die Neuerungen von ECMAScript 5 recht unspektakulär waren, sind die Features des neuen Sprachstandards umso interessanter. ECMAScript 6 versucht einige Anforderungen zu erfüllen, mit denen man als JavaScript-Entwickler täglich konfrontiert ist. Klassische Beispiele sind hier Promises zum Umgang mit asynchronen Funktionen, ein Module Loader zur Strukturierung der Applikation, Generatoren und Iteratoren oder aber ein neuer Gültigkeitsbereich für Variablen. Aber nicht nur große Änderungen, sondern auch sinnvolle Erweiterungen bestehender Objekte wie String und Array halten mit dem neuen Standard Einzug in den Browser. Problematisch wird die Situation jedoch, wenn man in den Genuss verschiedener Features kommen möchte, die aktuell noch von keinem Browser unterstützt werden. Hier schafft Traceur, der ECMAScript-6-Compiler von Google, Abhilfe.

Citation preview

Page 1: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Warum ES6 die Welt ein Stückchen besser macht

Karin Jung / pixelio.de

Page 2: Warum ECMAScript 6 die Welt ein Stückchen besser macht

WHO AM I?

• Sebastian Springer

• aus München

• arbeite bei Mayflower

• https://github.com/sspringer82

• @basti_springer

• Consultant, Trainer, Autor

Page 3: Warum ECMAScript 6 die Welt ein Stückchen besser macht

ECMA-262 Spezifikation und ISO/IEC 16262. Ursprünglich 1995 als Mocha, LiveScript und schließlich JavaScript von

Brendan Eich bei Netscape (in 10 Tagen) entwickelt.

Page 4: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Paul-Georg Meister / pixelio.de

So viel zur Geschichte

Page 5: Warum ECMAScript 6 die Welt ein Stückchen besser macht

ECMAScript 5

Page 6: Warum ECMAScript 6 die Welt ein Stückchen besser macht

• Object-Erweiterungen (defineProperty)

• Array-Erweiterungen (map, reduce)

• JSON

• Strict mode

Page 7: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Die größten Änderungen von ES5 waren die Erweiterung von Objekten und die Einführung des Strict Modes und

JSON. Ansonsten handelt es sich eher um kleinere Anpassungen und

Erweiterungen.

Page 8: Warum ECMAScript 6 die Welt ein Stückchen besser macht

ECMAScript 5 wird mittlerweile von allen gängigen Browsern unterstützt.

Page 9: Warum ECMAScript 6 die Welt ein Stückchen besser macht

ECMAScript 6

Jewgenia Stasiok / pixelio.de

Page 10: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Compat Table

http://kangax.github.io/compat-table/es6/

Page 11: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Frage:

S. Hofschlaeger / pixelio.de

Page 12: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Kann ich das jetzt schon verwenden?

Page 13: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Petra Bork / pixelio.de

Page 14: Warum ECMAScript 6 die Welt ein Stückchen besser macht
Page 15: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Traceur$ git clone https://github.com/google/traceur-compiler.git$ cd traceur-compiler$ npm install$ make

src/bootstrap.jsbin/traceur.js

<script src=“app.js” type=“module”></script>

Page 16: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Da ECMAScript 6 noch recht schlecht unterstützt wird, muss man sich anderweitig behelfen.

Die Browser entwickeln sich rasant weiter und da macht es wenig Sinn anhand der Browserversion Features zu

aktivieren. Die Tendenz geht hin zu Featuredetection und dem Einsatz von Polyfills.

Page 17: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Der Kern von ECMAScript 6

FotoHiero / pixelio.de

Page 18: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Kleine Helferoder: Was wir uns schon immer gewünscht haben

Gila Hanssen / pixelio.de

Page 19: Warum ECMAScript 6 die Welt ein Stückchen besser macht

String

• String.prototype.repeat

• String.prototype.startsWith/endsWith

• String.prototype.contains

Page 20: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Array

• Array.prototype.find

• Array.prototype.fill

• Array.prototype.keys/entries => Array Iterator

Page 21: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Neue FeaturesDie wirklich bewegenden Dinge

Alexandra H. / pixelio.de

Page 22: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Default Parameters

Page 23: Warum ECMAScript 6 die Welt ein Stückchen besser macht

TypeError: Cannot read property 'length' of undefined

function add(input) { console.log(input.length);}

add();

function add(input) { input = input || ''; console.log(input.length);}

add();

Page 24: Warum ECMAScript 6 die Welt ein Stückchen besser macht

function add(input = ‘’) {

console.log(input.length);

}

add();

Page 25: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Default Parameters• Können überall stehen

• Default wird benutzt, wenn undefined übergeben wird

• Beliebige Werte (Primäre Datentypen, Objekte, Arrays, Funktionen)

• arguments bleibt unverändert

• Zur Laufzeit ausgewertet

• Zugriff von späteren Defaults auf frühere

• Kein Zugriff auf Funktionen, die in der Funktion definiert sind

Page 26: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Class

Gerhard Prantl / pixelio.de

Page 27: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Das Objektmodell von JavaScript basiert auf Prototypen. Das war bis jetzt immer so und das wird auch so bleiben.

Page 28: Warum ECMAScript 6 die Welt ein Stückchen besser macht

function User(name) { this.name = name;}

User.prototype.getName = function() { return this.name;}

var klaus = new User(‘Klaus’);

Page 29: Warum ECMAScript 6 die Welt ein Stückchen besser macht

class User extends Person { constructor(name, pw) { super(name); this.pw = pw; }

getPw() { return this.pw; }}

var klaus = new User(‘Klaus’, ‘secret’);

Page 30: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Class

• Einfache Art der Vererbung

• Zugriff über super auf die Elternklasse

• Maskierung des Prototyps

Page 31: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Block Scope

lichtkunst.73 / pixelio.de

Page 32: Warum ECMAScript 6 die Welt ein Stückchen besser macht

function doSomething() { var a; for (var i = 0; i < a.length; i++) { … }}

ai

Page 33: Warum ECMAScript 6 die Welt ein Stückchen besser macht

function doSomething() { var a; for (let i = 0; i < a.length; i++) { … }}

ai

Page 34: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Block Scope• Neues Schlüsselwort let

• Variable ist nur in einem bestimmten Block gültig

• Bessere Kontrolle über Variablen innerhalb einer Funktion

• var und let nicht zu sehr mischen -> unübersichtlich

• Hoisting gilt innerhalb eines Blocks

Page 35: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Fat Arrow Functions

Dieter Schütz / pixelio.de

Page 36: Warum ECMAScript 6 die Welt ein Stückchen besser macht

var myObj = { clicked: false, init: function() { $(‘#mydiv’).on(‘click’, function() { this.clicked = true; }); }} this?

Page 37: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Fat Arrow Functions

(args) => { … return result;}

Fat Arrow

Page 38: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Fat Arrow Functionsvar myObj = { clicked: false, init: function() { document.addEventListener('click', () => { this.clicked = true; }); }};

myObj.init();

Page 39: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Fat Arrow Functions

• Sind an den Kontext ihrer Erstellung gebunden

• Können nicht mit dem new-Operator benutzt werden

• This kann nicht geändert werden (bind, call, apply)

Page 40: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Map/Set

w.r.wagner / pixelio.de

Page 41: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Maps

Key-Value-Store in JavaScript. Alle möglichen Datentypen als Schlüssel und Werte. Iterierbar.

Page 42: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Maps

size: Anzahl der Key-Value-Paare clear(): Leert die komplette Map. delete(key): Löscht ein Element. get(key): Liest ein Element aus. has(key): Prüft, ob der Schlüssel vorhanden ist. set(key, value): Setzt ein neues Key-Value-Paar.

Page 43: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Mapsvar map = new Map();

var nr = 1;var arr = [1,2,3];var func = function() {}var obj = {name: 'Klaus'};

map.set(nr, 'number');map.set(arr, 'array');map.set(func, 'function');map.set(obj, 'object');

Page 44: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Maps

for (var [key, val] of map) { console.log(key, val);}

Page 45: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Sets

Sets speichern eindeutige Werte in einer Datenstruktur. Möglichkeit zur Prüfung auf Vorhandensein. Auch iterierbar.

Page 46: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Sets

size: Anzahl der Elemente clear(): Leert das Set. add(value): Fügt einen neuen Wert hinzu. delete(value): Entfernt einen Wert. has(value): Prüft, ob der Wert im Set vorhanden ist.

Page 47: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Sets

var mySet = new Set();

mySet.add('Hello');mySet.add({name: 'World'});mySet.add(function() {});

Page 48: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Sets

for (var el of mySet) { console.log(el);}

Page 49: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Generators

Gerhard Frassa / pixelio.de

Page 50: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Generators

Ein Generator ist eine fist-class coroutine, die einen angehaltenen Ausführungskontext repräsentiert.

Page 51: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Generators

var gFunction = function*() { yield ‘Hello’; yield ‘World’;}

Page 52: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Generatorsvar generator = gFunction();

var value = generator.next();

{ value: ‘Hello’, done: false}

Page 53: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Generator Inputvar gFunction = function*() { var i i = yield 'first'; i = yield 'second' + i; yield 'third' + i;}

var g = gFunction();

console.log(g.next());console.log(g.next(1));console.log(g.next(2));

Page 54: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Generators

for (let i of generator) { console.log(i);}

Page 55: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Destructuring

Rahel Szielis / pixelio.de

Page 56: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Destructuring

Zuweisung von mehreren Elementen eines Arrays oder Objekts an Variablen in einer einzigen Operation.

Page 57: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Destructuring

var first = myArr[0];var second = myArr[1];var third = myArr[2];

var [first, second, third] = myArr;

Page 58: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Destructuring

• Auslassen von Elementen: var [,,bar] = [1,2,3];

• Multidimensionale Arrays: var [a, [b, c]] = [1, [2,3]]

Page 59: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Destructuring

var {foo, bar} = {foo: ‘a’, bar: ‘b’};

var {foo: a, bar: b} = {foo: ‘a’, bar: ‘b’};

Page 60: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Modulsystem

Marlies Schwarzin / pixelio.de

Page 61: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Modulsysteme in JavaScript

Es gibt zwei große Modulsysteme: AMD und CommonJS. Sie laden Script-Dateien und modularisieren die Applikation.

Page 62: Warum ECMAScript 6 die Welt ein Stückchen besser macht

– Google

Modules are not ready to use yet in Traceur, but they are partially

implemented.

Page 63: Warum ECMAScript 6 die Welt ein Stückchen besser macht

ES6 Modulsystem

var privateVariable = 'This is a private Value';

export var publicVariable = 'This is a public Value';

export function getPrivateVariable() { return privateVariable;}

Page 64: Warum ECMAScript 6 die Welt ein Stückchen besser macht

ES6 Modulsystem

import {publicVariable, getPrivateVariable} from 'module';

console.log(publicVariable);console.log(getPrivateVariable());

Page 65: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Viele weitere Features• Promises

• Symbols

• Typed Arrays

• WeakSet/WeakMap

• …

Page 66: Warum ECMAScript 6 die Welt ein Stückchen besser macht

Fragen?

Rainer Sturm / pixelio.de

Page 67: Warum ECMAScript 6 die Welt ein Stückchen besser macht

KONTAKT

Sebastian Springer [email protected]

Mayflower GmbH Mannhardtstr. 6 80538 München Deutschland

@basti_springer

https://github.com/sspringer82