TypeScript und CoffeeScript

Ähnliche Dokumente
Coffeescript. Javascript the good parts

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in ActionScript

Einführung in die Programmierung mit VBA

Einstieg in die Informatik mit Java

Virtuelle Realität und Simulation - Übung 2

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Programmierkurs Python I

Programmieren von Webinformationssystemen

Objektorientierte Programmierung mit JavaScript

C# im Vergleich zu Java

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Programmieren im Web 2.0

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Deklarationen in C. Prof. Dr. Margarita Esponda

Gebundene Typparameter

Java Einführung Abstrakte Klassen und Interfaces

Programmieren von Webinformationssystemen

Probeklausur: Programmierung WS04/05

Multimedia im Netz Wintersemester 2011/12

Repetitorium Informatik (Java)

Firefox Add-ons. Präsentation in WAP WS09/10 von Christoph ASCHBERGER, Andreas BERTOLIN, Robert MUTTER und Yunzhou XU

8. Generics Grundlagen der Programmierung 1 (Java)

Java I Vorlesung 6 Referenz-Datentypen

1 Polymorphie (Vielgestaltigkeit)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

JAVA - Methoden

Höhere Programmierkonzepte Testklausur

Werkzeuge zur Programmentwicklung

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Objektorientierte Programmierung

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

Oliver Zeigermann JavaScript für Java-Entwickler

WTFJS? EnterJS Matthias Reuter

Java Schulung (Java 2 Java Development Kit 5 / 6)

Welche Informatik-Kenntnisse bringen Sie mit?

Grundlagen der Programmierung in C Funktionen

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Java-Schulung Grundlagen

Einstieg in die Informatik mit Java

Der Beginn einer wunderbaren Freundschaft von Stefan Schnell

Codegeneratoren mit Xtend , A. Arnold

Algorithmen und Datenstrukturen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

1.4. Funktionen. Objektorientierte Programmierung mit C++

Seminar Scala SS2010, Einführung. R. Schiedermeier Fakultät 07 für Informatik und Mathematik

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Klassendefinitionen verstehen

AuD-Tafelübung T-B5b

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

Einstieg in die Informatik mit Java

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Ein Crashkurs. Mario Heiderich

JAVA - Methoden - Rekursion

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Enumerations und innere Klassen

Web-Anwendungsentwicklung mit dem Delivery Server

Algorithmen und Programmierung II

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmier-Befehle - Woche 10

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Grundlagen von Python

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Methoden (fortgeschritten) in C# - 1

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

Informatik I Übung, Woche 40

Java Einführung Methoden. Kapitel 6

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Frontend-Entwicklung mit JavaScript

Interfaces und Vererbung

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

1.3 Welche Schritte werden bei der Programmerstellung benötigt? 1.5 Was sind Variablen im Kontext der Programmierung?

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

The app the crashes, before the breakpoint is reached: Code to the event:

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Einführung in die Programmierung 1

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Einführung in Javadoc

C.3 Funktionen und Prozeduren

LINQ. LANGUAGE INTEGREATED QUERY.net 3.5. Bernhard Grojer

Java - Programmierung - Objektorientierte Programmierung 1

Javakurs für Anfänger

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Transkript:

Vorlesungsreihe EwA JavaScript Erweiterungen und Alternativen am Beispiel von TypeScript und CoffeeScript Prof. Dr.-Ing. Thomas Wiedemann email: wiedem@informatik.htw-dresden.de HOCHSCHULE FÜR TECHNIK UND WIRTSCHAFT DRESDEN (FH) Fachbereich Informatik/Mathematik

Gliederung JavaScript-Alternativen und Erweiterungen Motivation TypeScript Kurze Historie Wesentliche Erweiterungen CoffeeScript Historie - Eigenschaften Beispiele Zusammenfassung und Bewertung Quelle(n) (und weitere im Text): [1] https://www.typescriptlang.org (TypeScript-Homepage) [2] https://www.tutorialspoint.com/typescript/index.htm (Tutorial) [3] http://coffeescript.org/ CoffeeScript-Homepage und Tutorial Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 2

Motivation zur Erweiterung von JavaScript JavaScript Nutzung war 1995 vorrangig zur In-Browsermanipulation gedacht schnelle, unkomplizierte Integration in HTML und geringer Entwicklungsaufwand waren die Hauptziele Eine vollwertige Programmiersprache war eher zweitrangig Mit der zunehmenden Entwicklung komplexer Applikationen und dem wachenden Servereinsatz kommen die Nachteile immer deutlicher zum Vorschein https://secure.phabricator.com/book/phabflavor/article/javascript_pitfalls/ http://nrn.io/view/javascript-common-pitfalls/view/block-statements http://jonathan.bergknoff.com/journal/some-obscure-javascript-pitfalls Zur Bewältigung größere Projekte entstanden daher Erweiterungen und effizientere Syntaxformen Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 3

Übersicht zu TypeScript entwickelt von Microsoft ab 2012 TypeScript (TS) ist ein Superset von JavaScript jedes gültige JavaScript-Programm ist auch ein (syntaktisch) gültiges TypeScript-Programm TypeScriptprogramm werden von einem TS-Compiler in normales JavaScript umgewandelt, 2 Hauptziele deutlich strengeres Typ-System Verfügbarmachung von Funktionen aus neueren ECMAScript- Versionen (welche noch nicht in jedem Browser vorhanden sind) Interne Diskussion (eher aus Entwickler-Typensicht) Mit der zunehmenden Verwendung von JS im Backendbereich steigt auch die Anzahl der klassischen Backendprogrammierer (und diese kennen / wollen noch echte Klassen / Vererbung ) Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 4

TypeScript Überblick II Historie Erscheinungsjahr: 2012 Entwickler: Anders Hejlsberg (Chefentwickler von Microsoft (ehemals verantwortlich für Turbo Pascal und Delphi, später zu MS gewechselt) Softwaretyp Opensource unter Apache Lizenz Website: www.typescriptlang.org Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 5

TypeScript Installation / Einbindung in eigene Projekte Beschaffung via npm: npm install -g typescript oder Installation als VisualStudio-Plugin (Visual Studio 2015 and Visual Studio 2013 Update 2 enthalten es bereits) auch integrierte Quelltextanalyse in MS-Produkten (siehe MS Code) Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 6

Allgemeine Vorgehensweise Wie bisher JS-Codeentwicklung mit den neuen TypeScript-Optionen Übersetzung (Abwärtskompilierung) zu Standard-JavaScript TypeScript prog.ts function greet(person : string) { return "Hello, " + person; var user = "Tom"; console.log( greet(user) ); JavaScript prog.js tsc prog.ts function greet(person ) { return "Hello, " + person; var user = "Tom"; console.log( greet(user) ); Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 7

TypeScript Warnungen und Fehlermeldungen Wie bisher JS-Codeentwicklung mit den neuen TypeScript-Optionen Übersetzung (Abwärtskompilierung) zu Standard-JavaScript TypeScript prog.ts function greet(person : string) { return "Hello, " + person; var user : number = 123 ; console.log( greet( user ) ); tsc prog.ts error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. function greet(person ) { return "Hello, " + person; var user = 123 ; console.log( greet( user ) ); JavaScript prog.js Achtung: Der JS-Code ist trotzdem ohne Fehler ausführbar!!!! Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 8

Neue Sprachoptionen von TS : Datentypen und Zuweisungen Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html TS-Basisdatentypen => Handbook -> Basic types : number - für alle Zahlenwerte (JS stellt alles als 64 bit float dar!) : string - für Texte : boolean - für Wahrheitswerte Spezielle Typen und Values any - entspricht wieder einem beliebigen Typ (wie in JS var) void - kein Typ (z.b. KEIN Rückgabewert in Funktionen ) Value undefined - wie in JS für nicht initialisierte Variablen Beispiele für in TS erlaubte Datendeklarationen var t1 : string = text ; // volle Deklaration als Text-Variable var t1 = text ; // wie JS Typ ergibt sich aus Zuweisung var t1 ; // value = undefined Typ = any! Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 9

Neue Sprachoptionen von TS : Komplexere Datentypen https://www.typescriptlang.org/docs/tutorial.html => Handbook -> Arrays Komplexere Datentypen bauen auf den JS-Arrays auf TS-Array erlauben nur einen Datentyp var werte:number[4] = [1,2,3,4 ]; Tupel erlauben in Analogie zu JS-Arrays beliebige Typen Enums var mytuple = [10,"Hello"]; //create a tuple enum Direction { Up = 1, Down, Left, Right auch generische Ansätze (analog zu Template-Systemen) function myfunc<t>(arg: T): T { return arg; var output1= myfunc<string>("mystring"); var output2 = myfunc("mystring"); // Typ ergibt sich aus Parameter Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 10

Neue Sprachoptionen von TS : Datentypen und Zuweisungen Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html Bestimmung des Typs typeof( ) Operator liefert String mit Typangabe var num = 12; console.log(typeof num); //output: number auch direkt zur Verarbeitung von any-typangaben function padleft(value: string, padding: any) { if (typeof padding === "number") { return Array(padding + 1).join(" ") + value; if (typeof padding === "string") { return padding + value; => Handbook -> Basic types throw new Error(`Expected string or number, got '${padding'.`); padleft("hello world", 4); // returns " Hello world" Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 11

Neue Sprachoptionen von TS : Zuweisungen mit let Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html Problem mit var => Handbook -> Var declarat. Der Scope von JS- var in Blöcken entspricht nicht dem anderer Progsprachen, da auch NACH dem Block eine im Block definierte Variable weiterhin gültig ist: for (var i = 0; i < 10; i++) { /*... */ console.log(i); // zeigt 10 an - weil i noch verfügbar ist Neuer korrekter Block-Scope-Bereich mit let (analog zu var) for ( let j = 0; j < 10; j++) { /*... */ console.log( j ); // erzeugt TS-Fehlermeldung: Can not find name j - interessanter Seiteneffekt: bei gleicher Namensgebung benennt TS die 2. Variable um ( i_1) Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 12

Neue Sprachoptionen von TS : Funktionsdefinitionen Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html Functions => Handbook -> Functions alle bisherigen JS-Definition werden unterstützt (auch ohne Typparameter) zusätzlich auch typisierte Aufruflisten mit Typprüfung function add(x: number, y: number): number { return x + y; var c = add ( 2, 3 ) ; // ok var d = add ( ttt, kkk ) ; // TS- Fehler // error TS2345: Argument of type 'string' is not assignable to parameter of // type 'number'. analog auch mit anonymen Funktionen var res = function(a: number,b: number ) { return a*b; ; console.log(res(12,2)) auch als Fat-arrow (bzw. Lambda Function) var add10 = (x:number) => { x = 10 + x ; console.log(x) console.log(add10 (12 )) Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 13

Neue Sprachoptionen von TS : Optionale Funktionsparameter Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html Functions bei JS sind alle Parameter optional! => Handbook -> Functions TS prüft die Anzahl genau und unterstützt optionale und Rest-Parameter function buildname(firstname: string, lastname?: string) { if (lastname) return firstname + " " + lastname; else return firstname; let result1 = buildname("bob", "Adams"); // correct call let result2 = buildname("bob"); // ok with? In parameter list let result3 = buildname("bob", "Adams", junior"); // TS error // TS2346: Supplied parameters do not match any signature of call target. Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 14

Neue Sprachoptionen von TS : Zusätzliche Funktionsparameter Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html Functions => Handbook -> Functions Mit parname können auch beliebig viele Parameter erfasst werden function buildname2(firstname: string,...restofname: string[]) { return firstname + " " + restofname.join(" "); let name1 = buildname2("joseph", "Samuel", "Lucas", junior"); Generierter JS-Code function buildname2(firstname) { var restofname = []; for (var _i = 1; _i < arguments.length; _i++) { restofname[_i - 1] = arguments[_i]; return firstname + " " + restofname.join(" "); Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 15

Neue Sprachoptionen von TS : Klassen und Objekte Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html => Handbook -> Classes mit class sind OO-Definitionen in sehr großer Ähnlichkeit zu C++ / C# möglich TypeScript-Code Generierter JS-Code class Car { engine:string; //field //constructor constructor(engine:string) { this.engine = engine disp():void { // normal class function console.log("engine is : "+this.engine) // end of class definition var obj = new Car("VW"); // create //access the field console.log("engine : "+obj.engine) obj.disp(); // call object method var Car = (function () { //constructor function Car(engine) { this.engine = engine; // object function Car.prototype.disp = function () { console.log("engine is : " + this.engine); ; return Car; ()); var obj = new Car("VW"); // create console.log("engine:" + obj.engine); //access the function obj.disp(); Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 16

Neue Sprachoptionen von TS : Klassen-Vererbung Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html => Handbook -> Classes Auch die Vererbung mit extends hat sehr große Ähnlichkeit zu C++ / Java TypeScript-Code Generierter JS-Code class Shape { Area:number constructor(a:number) { this.area = a class Circle extends Shape { disp():void { console.log("area of the circle: "+this.area) var obj = new Circle(223); obj.disp() var extends = (this && this. extends) function (d, b) { for (var p in b) if (b.hasownproperty(p)) d[p] = b[p]; function () { this.constructor = d; d.prototype = b === null? Object.create(b) : (.prototype = b.prototype, new ()); ; var Shape = (function () { function Shape(a) { this.area = a; return Shape; ()); var Circle = (function (_super) { extends(circle, _super); function Circle() { _super.apply(this, arguments); var obj = new Circle(223); obj.disp(); Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 17

Neue Sprachoptionen von TS : Klassen-Zugriffspezifier Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html => Handbook -> Classes Es werden auch private / protected und weitere Zugriffsspezifier unterstützt TypeScript-Code class Encapsulate { str:string = "hello" private str2:string = "world" var obj = new Encapsulate() console.log(obj.str) //accessible console.log(obj.str2) // TS Error as str2 is private Weitere Zugriffsspezifier: Generierter JS-Code var Encapsulate = (function () { function Encapsulate() { this.str = "hello"; this.str2 = "world"; return Encapsulate; ()); var obj = new Encapsulate(); console.log(obj.str); //accessible console.log(obj.str2); // geht in JS readonly - nur über Init oder Konstruktor sind Änderungen möglich abstract - keine direkte Ableitung möglich! Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 18

Neue Sprachoptionen von TS : Interfaces Details / Quelle: TypeScript-Handbuch https://www.typescriptlang.org/docs/tutorial.html Interfaces dienen zur Definition wiederverwendbarer Typdefinitionen sind nur in TS relevant keine Kompilierung zu JS => Handbook -> Interfaces interface IPerson { firstname:string, lastname:string, sayhi: ()=>string var customer: IPerson = { firstname:"tom", lastname:"hanks", sayhi: ():string => { return "Hi there" Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 19

Neue Sprachoptionen von TS : Module und Namespaces bis TypeScript 1.5. gab es interne und externe Module ab TS 1.5. entsprechen interne Module den Namespaces https://www.typescriptlang.org/docs/tutorial.html => Handbook -> Namespace Namespaces bilden einen eigen Scope für die Bezeichner ausserhalb benötigte Funktionen müssen mit export deklariert werden! namespace Validation { Module export interface StringValidator { isacceptable(s: string): boolean; sind sehr ähnlich zu namespaces erlauben, jedoch zusätzlich die Definition von Abhängigkeiten (sind ab ECMAScript 2015 auch Sprachbestandteil und werden in node als Standard-Methode zur Codestrukturierung empfohlen) declare module MyModule1" { // in file module1.d.ts export function fn(): string; /// <reference path= module1.d.ts" /> // Ref. zu 1. Modul in 2. File import * as m from MyModule1"; Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 20

CoffeeScript Überblick Historie Erscheinungsjahr: 2009 Entwickler: Jeremy Ashkenas (auch Backbone.js framework) http://www.linuxjournal.com/content/introducing-coffeescript Softwaretyp Opensource unter MIT Lizenz Website(n): http://coffeescript.org/ http://courseware.codeschool.com/coffeescript_slides.pdf Haupteigenschaften wird ebenfalls übersetzt zu Standard JavaScript durch sehr spezielle Syntaxformen ( syntaktischer Zucker ) ist der CoffeeScript-Code ca. 30 bis 50% KLEINER als JS-Code besonders gut für Anfänger und WebDesigner OHNE C/Java- Vorbelastung geeignet Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 21

CoffeeScript Installation / Einbindung in eigene Projekte Beschaffung via npm: npm install -g coffee-script Aufruf coffee --compile test1.coffee test.js coffee --compile --output lib/ src/ ach mit Komandozeilenoptionen für Watch Überwachung von Source und autom. Neukompilierung Join - Zusammenführen von Source und Libs und viele weitere Optionen Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 22

CoffeeScript- Beispiele : Variablen und Basisbefehle Codeentwicklung mit CoffeeScript-Syntax Übersetzung (Abwärtskompilierung) zu Standard-JavaScript CoffeeScript test.coffee JavaScript prog.js # Assignment: number = 42 opposite = true # Conditions: number = -42 if opposite # Functions: square = (x) -> x * x # Arrays: list = [1, 2, 3, 4, 5] coffee var cubes, list, number, opposite, square; number = 42; opposite = true; if (opposite) { number = -42; square = function(x) { return x * x; ; list = [1, 2, 3, 4, 5]; Allgemeine Regeln: Whitespaces und Einrückungen sind sehr relevant für die Syntax! (bei Verstößen werden entsprechende Syntaxfehler gemeldet!) tw. minimalistische Syntax Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 23

CoffeeScript- Beispiele : sehr code-effiziente Syntax CoffeeScript # test for existence: alert "I knew it!" if elvis? #loops countdown = (num for num in [10..1]) # Eat lunch. eat food for food in ['toast', 'cheese'] JavaScript if (typeof elvis!== "undefined" && elvis!== null) { alert("i knew it!"); var countdown, num; countdown = (function() { var i, results; results = []; for (num = i = 10; i >= 1; num = --i) { results.push(num); return results; )(); ref = ['toast', 'cheese']; for (j = 0, len = ref.length; j < len; j++) { food = ref[j]; eat(food); Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 24

CoffeeScript- Beispiele : Arrays und Objekte CoffeeScript #arrays (Newline ersetzt Trenner) bitlist = [ 1, 0, 1 0, 0, 1 ] # Objects: math = root: Math.sqrt square: square cube: (x) -> x * square x #auch geschachelt Indents beachten! kids = brother: name: "Max" age: 11 sister: name: "Ida" age: 9 JavaScript var bitlist, math, kids; // var ganz oben bitlist = [1, 0, 1, 0, 0, 1,]; // Objects math = { root: Math.sqrt, square: square, cube: function(x) { return x * square(x); ; kids = { brother: { name: "Max", age: 11, sister: { name: "Ida", age: 9 ; Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 25

Zusammenfasssung Die Erweiterungen sind prinzipiell interessant, jedoch mit sehr unterschiedlicher Zielrichtung: TypeScript vom Microsoft Bringt JS näher an die bisherige Backend-Programmierung mit C++, C# und JAVA und vermeidet viele JS-Fehler Es ist zu erwarten dass viele TS-Optionen zukünftig in die neuen JS-Versionen einfließen werden (man arbeitet damit quasi in der Zukunft von JS!) CoffeeScript ist syntaktisch sehr interessant, jedoch bei Fehlern nicht sehr tolerant (tw. unklare Fehlermeldungen und auch Compiler-Abstürze) Ergebnis eines von einem einzelnen Programmierers betriebenen Projekts (???) Die Anwendung ist sicher auch eine persönliche Entscheidung (und eine Funktion der bisherigen Programmierpraxis) Beide JS-Erweiterungen (und andere Optionen wie Googles DART) sollten beobachtet werden! Entwicklung webbasierter Anwendungen - Prof. T.Wiedemann - HTW Dresden - Folie 26