Vorstellung e.solutions JavaScript, TDD und Code-Katas

1

Copyright e.solutions 5/3/2017

e.solutions

Das Joint Venture von Audi und Elektrobit

Bereiche bei e.solutions

Bereiche bei e.solutions Erlangen (HMI)

Ulm

Cluster Instrument (FPK)

Infotainment (MIBH)

Erlangen (HMI), Ingolstadt (Integration)

Rear Seat (SDIS)

Audi TT: Audi Virtual Cockpit Classic Skin – Cluster View („Kleine Bühne“)

Classic Skin - Infotainment View („Große Bühne“)

Audi Virtual Cockpit (FPK1, MIBH2) Hi-quality graphics experience, dynamic and user-configurable

Sport Skin (TTS)

Audi Q7/A4: Infotainment, Cluster, Rear Seat Audi Virtual Cockpit (FPK1)

Audi MMI (MIBH2)

Audi Tablet

Porsche Panamera

Copyright e.solutions 5/3/2017

8

Webtechnologien und AngularJS Webseiten basteln?

• Nicht „Webseiten-Basteln“, sondern Premium-Infotainment • „60 fps“: Performance sehr wichtig • Wie funktioniert der Browser und die

• •

Rendering-Pipeline? Unit-Tests, Integrations-Tests, End-To-End-Tests State-Of-The-Art der Webentwicklung für „Embedded“-Entwicklung nutzen

• Wir sind keine „Web-Bude“ ;-)

JavaScript Das ist doch keine Programmiersprache für richtige Entwickler(innen)!

JavaScript: The good, the bad, the ugly 1+2=2+1, also…

• • • • •

[] + [] = ??? [] + {} = ??? {} + [] = ??? {} + {} = ??? []+(-~{}-~{}-~{}-~{})+(-~{}-~{}) = ???

Bausteine von JavaScript Funktionen

• Funktionen als Sprachkonstrukte erster Klasse:



Parameter, Rückgabewerte, … Funktionen definieren einen eigenen Scope function hello() { console.log(„hello“); } hello(); function callFunction(f) { f(); } callFunction(hello);

function returnHello() { return hello; } returnHello()();

Bausteine von JavaScript Objekte

• Objekte als Map / Sammlung von Name-Wert-Paaren • Funktionen sind mögliche Werte x = { a: "hello", b: [1,2,3], f: function() { console.log("f"); } } x.a = "hallo"; console.log(x.b); x.f();

JavaScript Funktionale Programmierung

• Funktionen statt Objekte/Daten im Vordergrund

• •



(kein globaler Zustand) Funktionen als Sprachkonstrukte erster Ordnung, Kombination und Verkettung von Funktionen Funktionale Programmierung hat eine Renaissance erlebt mit der Verbreitung von JavaScript, funktionale Aspekte in Java 8 (Lambda) JavaScript ist keine “reine” funktionale Sprache

JavaScript Funktionale Programmierung

• Map, Reduce, Filter arr = [1,2,3]; arr.map(x => x*x); arr.filter(x => x%2==0); arr.reduce((x, y) => x+y);

• … oder alle zusammen

arr.map(…).reduce(…).filter(…)

• Weiterer Ausbau: RxJS https://github.com/Reactive-Extensions/RxJS

JavaScript Objektorientierte Programmierung

• Für OOP benötigt man Objekt-Definitionen • In JavaScript dynamische Typisierung • „Alter“ Weg: Prototypen übernehmen Rolle der •



Objektdefinition, können aber zur Laufzeit angepaßt werden „Neuer“ Weg: Ab JavaScript ES6 sind normale Klassendefinitionen möglich Echte Typisierung mit TypeScript

JavaScript - OOP Prototypen

• Prototypen entsprechen einer Klassendefinition function Dummy(v) { this.value = v; this.print = function() { console.log("print: "+this.value); } } new Dummy("hello").print(); Dummy.prototype.printer = function() { console.log("printer: "+this.value); } new Dummy("hello").printer();

Copyright e.solutions 5/3/2017

17

JavaScript – OOP Die neue Welt mit ES6

• Naja, das kennt man ja – class, constructor, …

class DummyES6 { constructor(v) { this.value = v; } print() { console.log(this.value); } } new DummyES6("hello").print();

Copyright e.solutions 5/3/2017

18

JavaScript – OOP Richtige Typisierung mit TypeScript

• Was ergänzt TypeScript? U.a…. • Typen: • var num:number = 15; var name:string = “123“; • function bla(arg1:string) { } Klassen Generics

• • • TypeScript-Compiler • Übersetzung von TS in JS • Wird von Toolchain automatisch erledigt • Map-Datei zum Debugging

Test-Driven Development

TDD

• Was ist es? • Idee: Tests zuerst schreiben • Tests aus Requirements ableiten, Code danach schreiben • Warum? • Code deckt genau das ab, was man braucht • Erfassung der Requirements • Code ist optimal auf Unit-Test ausgerichtet • Bessere Code-Struktur

TDD in der Praxis

• Aber in der Praxis? • Für viele Features schwierig anzuwenden, z.B. Komponenten, die stark vernetzt sind Nebenläufigkeit/Queues

• •  Gut für abgeschlossene Funktions-Komponenten

Code-Katas

Code-Katas

• Kleine, abgeschlossene Übungen • Begriff aus der japanischen Kampfkunst: häufige •

Wiederholung fürs Lernen eine Fähigkeit Bei uns: Vergleich und Diskussion der Lösungen

03.05.2017

24

JS-Code-Katas mit Codewars

https://www.codewars.com/ kata/fibonacci-number/ train/javascript

Copyright e.solutions 5/3/2017

25

Beispiel: JavaScript-Kata mit TDD - Fibonacci

… und noch eine Aufgabe!

• Maximum Subarray Sum • https://www.codewars.com/kata/maximum-subarraysum/train/javascript

Copyright e.solutions 5/3/2017

27

Noch Fragen? https://www.esolutions.de/ Matthias Bezold 28

Copyright e.solutions 5/3/2017