+ All Categories
Home > Documents > Jax2013 JavaScript für Java-Entwickler

Jax2013 JavaScript für Java-Entwickler

Date post: 01-Nov-2014
Category:
Upload: oliver-zeigermann
View: 1,555 times
Download: 0 times
Share this document with a friend
Description:
 
Popular Tags:
49
Oliver Zeigermann | http://zeigermann.eu Schmerzfreies JavaScript für Java- Entwickler Donnerstag, 25. April 13
Transcript
Page 1: Jax2013 JavaScript für Java-Entwickler

Oliver Zeigermann | http://zeigermann.eu

Schmerzfreies JavaScript für Java-Entwickler

Donnerstag, 25. April 13

Page 2: Jax2013 JavaScript für Java-Entwickler

Umfrage zum Start

Wer glaubt das?

1. JavaScript ist eine schlechte Sprache

2. Es ist gut für meine Karriere, JavaScript zu beherrschen

Donnerstag, 25. April 13

Page 3: Jax2013 JavaScript für Java-Entwickler

Themen

• Hello World

• Grundlagen JavaScript

• Aufklärung gängiger Vorurteile

• Tools und Frameworks

• Diskussion

Donnerstag, 25. April 13

Page 4: Jax2013 JavaScript für Java-Entwickler

Hello World

Donnerstag, 25. April 13

Page 5: Jax2013 JavaScript für Java-Entwickler

Hello World #1<!DOCTYPE html><html><head> <script> alert("Hello World"); </script></head><body></body></html>

Donnerstag, 25. April 13

Page 6: Jax2013 JavaScript für Java-Entwickler

Hello World #2<!DOCTYPE html><html><body> <div id="log"></div> <script> var element = document.

getElementById("log"); element.innerHTML =

"<h1>Hello World</h1>"; </script></body></html>

Donnerstag, 25. April 13

Page 7: Jax2013 JavaScript für Java-Entwickler

Hello World #3

node -e "console.log('Hello World');"

Donnerstag, 25. April 13

Page 8: Jax2013 JavaScript für Java-Entwickler

Hello World #4

Donnerstag, 25. April 13

Page 9: Jax2013 JavaScript für Java-Entwickler

Grundlagen

Donnerstag, 25. April 13

Page 10: Jax2013 JavaScript für Java-Entwickler

Sprach-Konzepte• Alles (bis auf Primitive) ist ein Objekt

• Alle Objekte sind "mutable"

• Funktionen sind Bürger erster Klasse

• Sind Objekte

• Können Daten enthalten

• Machen Scopes und Closures

• Protoypische Vererbung

Donnerstag, 25. April 13

Page 11: Jax2013 JavaScript für Java-Entwickler

Objektvar map = {olli: 'Huhu', zweites$Feld: 1,

$: "Auch sowas geht!"};map.$;map["zweites$Feld"];map.hund = "Ganz neu geht auch";map.f = function() { return "Aha!" };

for (var entry in map) { console.log(entry + ":" + map[entry]);}

Donnerstag, 25. April 13

Page 12: Jax2013 JavaScript für Java-Entwickler

Arrays

var array = ["a", "b", "c"];array[1] = 20;array instanceof Object;array.push(4);array.splice(1, 2);

for (var entry in array) { console.log(entry + ":" + array[entry]);}

Donnerstag, 25. April 13

Page 13: Jax2013 JavaScript für Java-Entwickler

Funktionenvar f1 = function(p1, p2) { return p1 + p2;}var result1 = f1(1,2);result1 === 3;

function f2() { console.log("Called!");}var result2 = f2();result2 === undefined;

Donnerstag, 25. April 13

Page 14: Jax2013 JavaScript für Java-Entwickler

Scopes

(function () { var achso = "Ich bin weg";})();

console.log(achso); // ReferenceError

Donnerstag, 25. April 13

Page 15: Jax2013 JavaScript für Java-Entwickler

Vorurteile

Donnerstag, 25. April 13

Page 16: Jax2013 JavaScript für Java-Entwickler

Die gängigsten Vorurteile• JavaScript hat keine Typen

• In JavaScript kann man keine Klassen und keine Vererbung ausdrücken

• Module und Kapselung sind nicht möglich

• Es ist sehr leicht, versehentlich globale Variablen zu erzeugen

• JavaScript nervt nur und hat keine coolen Sprachfeatures

Donnerstag, 25. April 13

Page 17: Jax2013 JavaScript für Java-Entwickler

Vorurteil: JavaScript hat keine Typen

Donnerstag, 25. April 13

Page 18: Jax2013 JavaScript für Java-Entwickler

Typentypeof "String" === "string";

typeof 1 === "number";typeof 1.0 === "number";

typeof true === "boolean";

typeof {} === "object";

typeof function() {} === "function";

Donnerstag, 25. April 13

Page 19: Jax2013 JavaScript für Java-Entwickler

Vorurteil: In JavaScript kann man keine Klassen und keine Vererbung ausdrücken

Donnerstag, 25. April 13

Page 20: Jax2013 JavaScript für Java-Entwickler

Klassen: Gebrauch

var olli = new Person("Olli", 42);

olli instanceof Person;

olli.sayHello("Oma");// => Olli says hello to Oma

Donnerstag, 25. April 13

Page 21: Jax2013 JavaScript für Java-Entwickler

Klassen: Definitionfunction Person(name, age) { this.name = name; this.age = age;}

Person.prototype.sayHello = function(name) {

console.log( this.name + " says hello to " + name);

};

Donnerstag, 25. April 13

Page 22: Jax2013 JavaScript für Java-Entwickler

Vererbungfunction Customer(id, name, age) { // super constructor Person.call(this, name, age); this.id = id;}

// extendsCustomer.prototype = Object.create(Person.prototype);Customer.prototype.constructor = Customer;

Donnerstag, 25. April 13

Page 23: Jax2013 JavaScript für Java-Entwickler

Vorurteil: Module und Kapselung sind

nicht möglich

Donnerstag, 25. April 13

Page 24: Jax2013 JavaScript für Java-Entwickler

Kapselungvar Module = {};(function() { function InternalStuff() {...} function Person(name, age) { // uses class InternalStuff } Module.Person = Person;})();

var olli = new Module.Person("Olli", 42);Module.InternalStuff === undefined;

Donnerstag, 25. April 13

Page 25: Jax2013 JavaScript für Java-Entwickler

Wie die Kapselung funktioniert: Closures

Closures frei nach Douglas Crockford

Eine innere Funktion hat immer Zugriff auf alle Variablen und Parameter ihrer äußeren Funktion,

auch wenn diese äußere Funktion bereits beendet ist

Donnerstag, 25. April 13

Page 26: Jax2013 JavaScript für Java-Entwickler

Vorurteil: Es ist sehr leicht, versehentlich globale

Variablen zu erzeugen

Donnerstag, 25. April 13

Page 27: Jax2013 JavaScript für Java-Entwickler

Strict Mode

"use strict";

(function (param) { var value = 10; // error: no accidental setting of // global variable vaule = value + param; return value;}());

Donnerstag, 25. April 13

Page 28: Jax2013 JavaScript für Java-Entwickler

Vorurteil: JavaScript nervt nur und hat keine coolen Sprachfeatures

Donnerstag, 25. April 13

Page 29: Jax2013 JavaScript für Java-Entwickler

Closures seit ES5 vs. Java8var array = [1, 2, 3];array.forEach(function(e){ console.log(e);});

array.filter(function(e){ return e > 2;});

array.map(function(e){ return e + 100;});

Donnerstag, 25. April 13

Page 30: Jax2013 JavaScript für Java-Entwickler

Mehr Vorurteile

• Es gibt keinen Standard, jeder Browser implementiert seinen eigenen Dialekt

• JavaScript ist langsam

• JavaScript ist wie CSS und HTML für Designer, nicht für richtige Entwickler

Donnerstag, 25. April 13

Page 31: Jax2013 JavaScript für Java-Entwickler

Tools und Frameworks

Donnerstag, 25. April 13

Page 32: Jax2013 JavaScript für Java-Entwickler

Entwicklungsumgebungen

• WebStorm

• Chrome Dev-Tools

• vi / emacs / TextMate /Sublime Text / etc. gehen natürlich auch

Donnerstag, 25. April 13

Page 33: Jax2013 JavaScript für Java-Entwickler

Live-Demo WebStorm

Donnerstag, 25. April 13

Page 34: Jax2013 JavaScript für Java-Entwickler

Frameworks• jQuery

• Twitter Bootstrap

• Jasmine

• Ext JS

• AngularJS

• TodoMVC

Donnerstag, 25. April 13

Page 35: Jax2013 JavaScript für Java-Entwickler

• Standard-JavaScript-Bibliothek

• Fast überall zu finden

• Adressiert Probleme bei der Programmierung des DOMs

• Flexible Trennung von View und Logik

• Auch für Erweiterung klassischer Webanwendungen

jQuery

Donnerstag, 25. April 13

Page 36: Jax2013 JavaScript für Java-Entwickler

jQuery

$(document).ready(function(){ $("a").click(function(event){ alert("Thanks for visiting!"); }); });

Donnerstag, 25. April 13

Page 37: Jax2013 JavaScript für Java-Entwickler

Testen mit Jasminedescribe("Calculator"

... it("principle" ....expect(principle). toEqual(199990);

);...);

Donnerstag, 25. April 13

Page 38: Jax2013 JavaScript für Java-Entwickler

Twitter Bootstrap: Responsive Layout

<div class="container">

<div class="hero-unit">

<h1>Hello, world!</h1>

...

<a class="btn btn-primary">Learn more &raquo;</a>

</div>

<div class="row">

<div class="span4">

<h2>Heading</h2>

...

Donnerstag, 25. April 13

Page 39: Jax2013 JavaScript für Java-Entwickler

Business-Anwendungen mit Ext JS

Donnerstag, 25. April 13

Page 40: Jax2013 JavaScript für Java-Entwickler

AngularJS

• Motto: HTML enhanced for web apps!

• Wie würde HTML aussehen, wenn es für Anwendungen entwickelt worden wäre?

Donnerstag, 25. April 13

Page 41: Jax2013 JavaScript für Java-Entwickler

Hello World AngularJS<!doctype html><html ng-app> <head> <script src="lib/angular.min.js"> </script> </head> <body> <input ng-model="name"> <p>Hello {{name}}!</p> </body></html>

Donnerstag, 25. April 13

Page 42: Jax2013 JavaScript für Java-Entwickler

TodoMVC

http://todomvc.com/Donnerstag, 25. April 13

Page 43: Jax2013 JavaScript für Java-Entwickler

Bonus-Vorurteil

Donnerstag, 25. April 13

Page 44: Jax2013 JavaScript für Java-Entwickler

JavaScript ist nicht gut geeignet für große, langlebige Projekte

Donnerstag, 25. April 13

Page 45: Jax2013 JavaScript für Java-Entwickler

Hauptgrund: Fehlende statische Typisierung

Donnerstag, 25. April 13

Page 46: Jax2013 JavaScript für Java-Entwickler

Live-Demo TypeScript

Donnerstag, 25. April 13

Page 47: Jax2013 JavaScript für Java-Entwickler

Zusammenfassung• Viele Vorurteile gegenüber JavaScript beruhen

auf Missverständnissen

• Strukturgebende Elemente (Klassen, Module) sind in JavaScript über Patterns möglich

• JavaScript hat coole Sprachfeatures

• Es gibt mächtige Werkzeuge und Frameworks

• TypeScript erleichtert Entwicklung im großen Stil

Donnerstag, 25. April 13

Page 48: Jax2013 JavaScript für Java-Entwickler

Umfrage zum Abschluss

Wer glaubt das nun?

1. JavaScript ist eine schlechte Sprache

2. Es ist gut für meine Karriere, JavaScript zu beherrschen

Donnerstag, 25. April 13

Page 49: Jax2013 JavaScript für Java-Entwickler

Fragen / Diskussion

Oliver Zeigermannhttp://zeigermann.eu

Donnerstag, 25. April 13


Recommended