TypeScript. Das JavaScript der Zukunft? Trainer, Berater, Entwickler



Ähnliche Dokumente
TypeScript JavaScript mit ohne Kopfschmerzen. Veit Weber 3. JUG Saxony Day Radebeul

Über mich. Daniel Bälz. Softwareentwickler (inovex GmbH) github.com/dbaelz

RAP vs. GWT vs. GAE/J + jquery. Web Technologien im Verlgeich

Grundlagen von Python

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Präsentation Von Laura Baake und Janina Schwemer

IntelliJ IDEA. Gliederung. Was ist IntelliJ IDEA? Lizenzmodell Warum IntelliJ einsetzen? IntelliJ und Eclipse Demo. Blick über den Eclipse-Tellerrand

Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap

App Entwicklung mit Hilfe von Phonegap. Web Advanced II - SS 2012 Jennifer Beckmann

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Webseiten und Web-Apps grafisch gestalten mit HTML5 Canvas ohne Flash und sonstige Tools

Android Testautomatisierung mit dem Framework Robotium

Übersicht. Eclipse Foundation. Eclipse Plugins & Projects. Eclipse Ganymede Simultaneous Release. Web Tools Platform Projekt. WSDL Editor.

Struts 2 Das Imperium schlägt zurück?

Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen

MOBILE ON POWER MACHEN SIE IHRE ANWENDUNGEN MOBIL?!

Objektorientiertes JavaScript

Arbeiten mit UMLed und Delphi

Agile Testautomatisierung im XING Mobile Team

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Vorkurs Informatik WiSe 15/16

Java Script für die Nutzung unseres Online-Bestellsystems

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Florian Rappl. TypeScript

Google Cloud Print. Stefan Seltenreich

Magento Theming Ein Einstieg Rainer Wollthan

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Jörg Neumann Acando GmbH

Cross-Platform Mobile mit.net

Zentrale Informatik. Cross-platform Apps. Andrea Grössbauer David Meier. 11/11/15 Lunchveranstaltungen HS16 - Crossplatform Apps 1

Innere Klassen in Java

Prinzipien Objektorientierter Programmierung

SDK zur CRM-Word-Schnittstelle

Von Windows-Forms zu WPF mit Expression Blend? Thomas Müller conplement AG Nürnberg

Mission. TARGIT macht es einfach und bezahlbar für Organisationen datengetrieben zu werden

Java: Vererbung. Teil 3: super()

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Übung: Verwendung von Java-Threads

Konzept zur Push Notification/GCM für das LP System (vormals BDS System)

Python SVN-Revision 12

ios, Android, WP7... Alle nativ auf einen Streich!

Mobile RPG - Smartphone-Anwendungen mit Mobile RPG - I Christian Neißl,

Architekturen mobiler Multi Plattform Apps

Eine App, viele Plattformen

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

MOBILE ENTERPRISE APPLICATION PLATFORM (MEAP)

Nie wieder eine Sitzung verpassen unser neuer Service für Sie!

Java Entwicklung für Embedded Devices Best & Worst Practices!

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Programmieren in Java

Die Vielfalt der Apps. Wohin geht die Reise?

Cross Plattform App Developement. Simon Groth

Überblick. Klassen Optionale Typen DOM. Optionale Parameter Klassen. Einführung. 2 Motivation 3 Werkzeuge 4 Demonstration 5 Dart

TELEMETRIE EINER ANWENDUNG

Anleitung über den Umgang mit Schildern

Expertenumfrage: Mobile Applications

Applet Firewall und Freigabe der Objekte

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Mobile Applications. Adrian Nägeli, CTO bitforge AG

mobile Responsive Design Lässt Ihre Anwendungen und Inhalte auf jedem Gerät einfach gut aussehen

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Die freie Programmiersprache Python mit Beispielen für ihren praktischen Einsatz. Python User Group Köln

Abschlussarbeiten für StudentInnen

Agile Testautomatisierung im XING Mobile Team

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Java Web Services Metadata JSR-181

Zend PHP Cloud Application Platform

Client-Server-Beziehungen

Ein Überblick über KDevelop

Java Kurs für Anfänger Einheit 5 Methoden

EPO Consulting GmbH. Ihr Partner für HTML5 und SAP UI5 Apps. Stand 2015/04. EPO Consulting GmbH - 1 -

Lokale Installation von DotNetNuke 4 ohne IIS

25 Import der Beispiele

Einführung in Eclipse und Java

Ein mobiler Electronic Program Guide

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Einstieg in die Informatik mit Java

Wir testen mobile Apps und Webseiten. Wir nennen das Crowdtesting. Mobile Strategie Deutscher Unternehmen 2014 Zusammenfassung der Studienergebnisse

Visual Basic Express erstes Projekt anlegen

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Web und Mobile Apps Programmieren mit Dart

Mobile Analytics mit Oracle BI

SMART Newsletter Education Solutions April 2015

Scala & Lift. Ferenc Lajko

Cad-OasEs Int. GmbH. 20 Jahre UG/NX Erfahrung prägen Methodik und Leistungen. Nutzen Sie dieses Wissen!

Cross-Platform Mobile Development mit Xamarin Mark

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Mobile: Die Königsfrage

Transkript:

Das JavaScript der Zukunft? Orientierungspunkt 12/2013 Version: 1.0 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de Ihr Sprecher Sönke Sothmann Trainer, Berater, Entwickler Schwerpunkte Agile Entwicklungsprozesse, Entwicklung von Web-Anwendungen, Web als Plattform 2 1

Gliederung JavaScript Überblick über JavaScript Alternativen und Abgrenzung Vorstellung Marktakzeptanz 3 Gliederung JavaScript Überblick über JavaScript Alternativen und Abgrenzung Vorstellung Marktakzeptanz 4 2

Das Web heute - aus Anwendersicht Benutzerfreundlich Rich User Experience Hohe Geschwindigkeit, geringe Latenz Gute Ideen Messlatte: z.b. Google-Dienste 5 Webtechnologien erobern neue Domänen Desktop Web Anwendungen Mobile Web Anwendungen Native Mobile Anwendungen ios, Android, Windows Phone, Blackberry, Desktop Anwendungen Windows Store Apps Chrome / ChromeOS Apps Ubuntu Apps Server-Anwendungen Node.js 6 3

Die Bedeutung von JavaScript JavaScript läuft überall Write once, run anywhere für Frontends Wird uns noch Jahre begleiten 7 Programmiermodell im Web Entwicklung ist Aufwändig / teuer Fehleranfällig Nervenzehrend Verantwortlich dafür Schwächen der Sprache JavaScript Keine Klassen, Module, Abhängigkeiten Keine statische Typisierung Tooling Browserinkompatibilitäten Kein standardisiertes Komponentenmodell 8 4

JavaScript Highlights Objektliterale Objekte als Maps nutzen Array Notation (vergleichbar mit Java List) Closures 9 JavaScript Codebeispiele move({x: 3, y: 5); var map = {a:1, b:2 map["a"] map.a var arr = ["Hallo", "JavaScript"]; arr.push("welt") arr.join(" "); button.click(function() { // ); var myfunction = button.click(myfunction); 10 5

JavaScript Vorteile Elegante Sprachkonstrukte Nachteile Fehlende statische Typisierung Schwaches Tooling Ungewohntes Vererbungskonzept Keine Klassen Prototyp. Vererbung ist weniger deklarativ Keine Abhängigkeiten, Module Müssen über Bibliotheken nachgerüstet werden Magere Funktionsbibliothek Viele Stolperfallen JavaScript wird uns noch ein Weilchen begleiten 11 ECMAScript 6 Kommender JavaScript Standard Bringt Klassen Module Abhängigkeiten Aber Noch nicht fertig spezifiziert Noch kein nennenswerter Browser Support (http://kangax.github.io/es5-compat-table/es6/) Statische Typisierung nicht auf der Roadmap 12 6

JavaScript als Programmiersprache 13 JavaScript als ByteCode 14 7

JavaScript Alternativen Readable JavaScript Easy JS integration JavaScript as Bytecode Cumbersome JS integration Script# 15 CoffeeScript Ruby ähnliche Syntax Beliebt unter Ruby on Rails Entwicklern Syntactic sugar Bietet Klassen Erzeugt ideomatisches JavaScript Sprache, kein Framework Keine statische Typisierung 16 8

GWT Weit entfernt von JavaScript JavaScript als ByteCode, hochoptimiert Einbindung externer Bibliotheken umständlich und fehleranfällig Eigenes Ökosystem mit nativen GWT Bibliotheken JavaScript Bibliotheken nur wenn unbedingt nötig Sprache Java, damit statische Typisierung, gutes Tooling Framework Code-Sharing zwischen Front- und Backend Kein Drop-in Replacement 17 DART Enthüllt 10/2011 von Google Sprache, kein Framework Ausführung In Laufzeitumgebung Cross-compiled zu JavaScript 18 9

Ziele / Vorteile von DART (1) Strukturierter / large scale application development Bietet Statische Typisierung Klassen Module Abhängigkeiten 19 Ziele / Vorteile von DART (2) Soll langfristig JS als Sprache des Webs ersetzen Für Client und Server Gutes Tooling (Eclipse) 20 10

Nachteile von DART Neue Plattform Fehlende Bibliotheken (3rd Party) Fehlende Community Kann JS aufrufen, ist aber umständlich Keine Unterstützung der VM durch andere Browserhersteller 21 DART VM wird es schwer haben I guarantee you that Apple and Microsoft (and Opera and Mozilla, but the first two are enough) will never embed the Dart VM. - Brendan Eich (Mozilla), Inventor of JavaScript 22 11

Enthüllt 10/2012 von Microsoft Sprache, kein Framework Cross-compiled zu JavaScript Generiert idiomatisches JavaScript 23 Ziele / Vorteile von (1) Strukturierter / large scale application development Bietet Statische Typisierung Optional, Type Inference Klassen Interfaces Enums Module Abhängigkeiten 24 12

Ziele / Vorteile von (2) JavaScript nicht ersetzen Schwächen ausgleichen Superset von JavaScript Projekte leicht migrierbar, bestehende JS Bibliotheken nutzbar Declaration Files Bestehende JavaScript Bibliotheken nachträglich typisieren Implementiert zukünftige ES6 Features schon heute, hält sich an Spec Gutes Tooling (Visual Studio, Eclipse) 25 Schöpfer von Anders Hejlsberg Steve Lucco (Chakra) Luke Hoban (ECMA) (Erich Gamma) 26 13

Warum gerade? (1) Statische Typisierung + Tooling Alle fehlenden Features vorhanden Sehr dicht an JS = Investment Protection Migration von Bestandscode Integration von Bestandscode Integration von JS Bibliotheken JavaScript Wissen bleibt erhalten / kann genutzt werden 27 Warum gerade? (2) Drop-In Replacement Überall, wo wir schon JS haben, oder Überall, wo Kunde JavaScript will Generiert ideomatisches JavaScript Exit Strategie fallen lassen, mit den generierten JS Files weiterentwickeln Nicht die sauberste, aber die aktuell pragmatischste Lösung, um das Programmiermodell zu verbessern 28 14

Ist die Zeit reif für? Sprache noch Preview Schon 0.9, nächster Sprung wird auf 1.0 sein Gutes Tooling vorhanden Noch gibt es einige Bugs Man ist im Moment noch Early Adopter 29 Gliederung JavaScript Überblick über JavaScript Alternativen und Abgrenzung Vorstellung Marktakzeptanz 30 15

Tooling Compiler / Kommandozeile Kann SourceMaps produzieren Kann Declaration Files produzieren Kompilieren vieler TS Dateien in eine große JS Datei möglich EcmaScript Zielversion wählbar Aktuell ES3 oder ES5 Kein implizites any erzwingbar IDEs Language Service 31 IDEs ( Playground) Visual Studio 2012/2013 Web Essentials Plugin Visual Studio Express 2012/2013 for Web Visual Studio Online Eclipse JetBrains IntelliJ / WebStorm / PHPStorm Text Editors Sublime Text, Vim, Emacs Cloud9 IDE 32 16

IDEs - Visual Studio 33 IDEs - Eclipse 34 17

Typ Annotationen var i = 1; var i: number = 1; function f(i: number) : number { // var x: any; 35 Optionale Argumente, Default-Werte und Rest-Parameter function multiply(val: number, factor?: number = 1) { return val * factor; function add(...numbers: number[]) { var result = 0; for (var i = 0; i<numbers.length; i++) { result += numbers[i]; return result; 36 18

Überladen von Funktionen function doit(a: string): void; function doit(a: number): void; function doit(a: any): void { // 37 Klassen class Content { private title: string; constructor(title: string) { this.title = title; tostring(): string { return this.title; 38 19

Klassen - Konstruktor Magie class Content { constructor(public title: string) { tostring(): string { return this.title; 39 Vererbung und Polymorphie class Book extends Content { constructor(title:string, public isbn:string) { super(title); tostring() { return super.tostring() + " (ISBN: " + this.isbn + ")"; 40 20

Interfaces interface Printable { print(): void; class Foo implements Printable { print(): void { console.log("hello from Foo"); 41 Overload on constants interface Document { createelement(tagname: string): HTMLElement; createelement(tagname: "canvas"): HTMLCanvasElement; createelement(tagname: "div"): HTMLDivElement; createelement(tagname: "span"): HTMLSpanElement; // 42 21

Structural Typing interface Point { x: number; y: number; z?: number; function acceptpoint(point: Point) { // acceptpoint( {x:1, y:2 ); acceptpoint( {x:1, y:2, z:5 ); 43 Arrow Function Expressions var add = (a: number, b: number) => { return a + b; var print = s => { console.log(s); var doubleit = (x:number) => x*2; var doit = () => { console.log("hello world!"); 44 22

Arrow Function Expressions - lexical scoping of this class ArrowFunctionDemo { private message = "Hello from Arrow Function"; run() { settimeout( () => { console.log(this.message);, 1000 ); new ArrowFunctionDemo().run(); 45 Methodensignaturen erzwingen - am Beispiel von Callbacks class MyDialog { private handler: { (arg: string): number; ; addokhandler(handler: { (arg: string): number; ) { this.handler = handler; run() { this.handler("foo"); 46 23

Methodensignaturen erzwingen - am Beispiel von Callbacks (2) var dialog = new MyDialog(); dialog.addokhandler(function (arg: string) { console.log(arg); return 1; ); // NOT OK - wrong type dialog.addokhandler(function (arg: number) { return 1; ); // OK: the consumer is not forced to accept the arg dialog.addokhandler(function () { return 1; ); 47 Module module cai { export class Content { // /// <reference path="content.ts" /> import Content = cai.content; new Content("Test"); 48 24

Enums enum Color { RED, GREEN, BLUE 49 Generics class Container<T> { public content: T; ; var c = new Container<number>(); c.content = 5; 50 25

Ambient Declarations JavaScript Bibliotheken mit statischen Typinformationen versehen Z.B. von Definitely Typed 51 Ambient Declarations - für klassenartige Bibliotheken declare module Library { export class AClass { doit(arg: string): void; declare var lib: Library; 52 26

Ambient Declarations - für nicht klassenartige Bibliotheken interface Library { AClass: { doit(arg: string): void; ; declare var lib: Library; 53 Migration Mix aus JS und möglich Bestehender JS Code kann Schritt für Schritt migriert werden die Migration kann unterschiedlich weit getrieben werden 54 27

Mögliche Migrationsstrategie 1. Dateiendung ändern.js =>.ts erste Fehler durch Type Inference 2. Typinformationen einstreuen (primitive Datentypen) 3. 4. Umstellen auf Interfaces und Klassen Umstellen auf Sprachkonstrukte wie Enums und Generics 55 Gliederung JavaScript Überblick über JavaScript Alternativen und Abgrenzung Vorstellung Marktakzeptanz 56 28

Meinung von Douglas Crockford Microsoft's may be the best of the many JavaScript front ends. It seems to generate the most attractive code. Douglas Crockford 57 Marktakzeptanz von Erfahrungsberichte von Early Adoptern überwiegend sehr positiv Noch kein Hype Wenig in den Medien Präsent (z.b. Magazine) Wenig Vorträge auf Konferenzen 58 29

Firmen, die nutzen / investieren Visual Studio Online (Project Lead Erich Gamma) Team Foundation Server BING Bildersuche Xbox Music Touchdevelop.com (Touchscreen IDE für App Entwicklung) Socl Compiler 59 Firmen, die nutzen / investieren (2) Palantir Technologies hawt.io (HTML5 web management UI) 3D-/Game-Engines (StarlingJS, Turbulenz, Away3D) featuremap.co (Online Project management software) zud.io (Windows Azure Management Tool) HittaHem.se (Real Estate) jriappts (RIA Framework) 60 30

Definition Files für JavaScript Bibliotheken Viele JS Bibliotheken haben schon Definition Files https://github.com/borisyankov/definitelytyped Für über 200 Projekte Über 300 Contributors Emöglicht besseren Tool Support und Typsicherheit Liefern JS Frameworks zukünftig TS Definition Files mit? Bisher keine Anzeichen 61 Aktivität in Foren Official Forum, über 5000 Posts http://typescript.codeplex.com/discussions Auf Stackoverflow >1500 tagged questions zum Vergleich, Dart hat 1800, ist aber schon knapp ein Jahr älter und schon Version 1.0 62 31

Meinung zu TS in den Communities der JS Frameworks Viele finden es sehr interessant Einige haben bereits TS zusammen mit ihrem Framework genutzt größtenteils sehr angetan Step by step Migration tatsächlich einfach Generierter JS Code ist tatsächlich schön Exit Strategie: Zurück zu JavaScript auf Grundlage des Kompilates Besonders viel Interesse in der Microsoft Welt Skepsis Viele warten erstmal auf 1.0 Es kommt von Microsoft 63 Fazit Leichte Migration und Integration Mit beliebigen JS Frameworks verwendbar Bewährte Sprachkonstrukte nachgerüstet Statische Typisierung So viel statische Typisierung wie möglich Dynamische Typisierung wo es Sinn macht Schnelles Feedback -> Fehler schnell erkennen Besseres Tooling Investitionssicherheit (Knowhow, Exit-Strategie) Entscheidung FÜR JavaScript Wir rüsten uns nur fehlende Features nach 64 32

Links Real world projects written in http://typescript.codeplex.com/discussions/430577 (Mostly) Painlessly Migrating a 3D Game Engine to http://hardcodeded.blogspot.jp/2013/02/mostly-painlessly-migrating-3dgame.html DefinitelyTyped https://github.com/borisyankov/definitelytyped 65?? Fragen??? Orientation Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de?? 33

Vielen Dank für ihre Aufmerksamkeit! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de 34