Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

52
Angulardart 2 vs React vs Elm Mohammed El Batya - Münchner Webwoche 2016

Transcript of Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Page 1: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Angulardart 2 vs React vs ElmMohammed El Batya - Münchner Webwoche 2016

Page 2: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
Page 3: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
Page 4: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Mohammed El Batya

Wer bin ich?

Job 1: Lean Java Expert @ comSysto

Job 2: Freiberufl. Wirtschaftsinformatiker

Job 3: PendelPanda - Entwickler

Hobby: Spielen und Entdecken :)

Page 5: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Mein Skill-Level

● ReactJS

● AngularDart2

● Elm

Page 6: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Vorgeschichte

Page 7: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

2011 2016

PendelPanda - Fahrplanauskunft

Heute

Page 8: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
Page 9: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Von PendelPanda “inspirierte” Apps

PendelMe - iOSSBB - Android / iOS?

Page 10: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

PendelPanda.de

Page 11: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

PendelPanda.de

Page 12: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

PendelPanda.de

Page 13: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
Page 14: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

... in den nächsten zwei Wochen

Page 15: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

PendelPanda.dePendelPanda.one

Page 16: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Welches Framework?

v1 / v2

v1 / v2

Page 17: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

stateofjs.com/2016/frontend

Elm?

Page 18: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

http://elm-lang.org

Page 19: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Finale Auswahl

2

JS +JSX

Dart

Elm

Facebook

Google

Evan Czaplicki

Sprache Entwickler

Masterarbeit

Page 20: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Kompilieren / Transpilieren

JSX

Dart

Elm

Pures JavaScript

Assemblersprachedes modernen Webs

Page 21: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

SyntaxReact: JavaScript + JSX

Page 22: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

React JavaScript + JSX - Beispiel 1

Pseudo-HTML als Erweiterung der Skriptsprache

Page 23: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

React JavaScript + JSX - Beispiel 2

JSX Elemente können auch Variablen zugewiesen werden.

Page 24: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

React JavaScript + JSX - Beispiel 3

Der Rest ist ganz “normales” JavaScript

Page 25: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

SyntaxAngularDart2: Dart

Page 26: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Dart - Beispiel 1

“Objektorientierter Mix aus JavaScript und Java”

Page 27: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Dart - Beispiel 2

Annotations werden umfangreich verwendet

Page 28: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Dart - Vorteile gegenüber JavaScript

● Klassen, Interfaces, Vererbung

● Typprüfung!!! optional

● Einfach weniger Stolperfallen

Page 29: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

SyntaxELM

Page 30: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Eigenschaften

● Rein funktional

● 100%tige Immutabilität

● Statische Typisierung

● Sonderbehandlung von Nebeneffekte

● Pseudo-HTML als Teil der Sprache

Page 31: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Unterschiede zu Dart / JavaScript

● Keine Objekte, Klassen, Interfaces etc.

● Keine For, While, Do Schleifen

● Kein “Null” oder ähnliches

● Keine Laufzeitfehler

● Keine unkontrollierten Nebeneffekte

● Pattern Matching und Destrukturierung

Page 32: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Beispiel für Typen

Page 33: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Beispiel für Funktionen

Implementierung

Deklaration der Funktionssignatur

// Finde in der Liste Model.Buttons// einen Button mit der gegebenen Button.Id

Page 34: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Beispiel für Funktionen im Detail

Funktionsname RückgabetypTypen der 2 Parameter

Namen der 2 Parameter

Page 35: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Pseudo-HTML - Beispiel

Page 36: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

ELM - Immutabilität

Page 37: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

KomponentenbasierteUI - FrameworksReact und Angular

Page 38: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Komponentenbasierte UIs

Click me

Hottest Users

On

Bla bla blaaaaaBla bla blaaaaa la bla blaaaaa Bla bla blaaaaa Bla bla blaaaaa Bla bla blaaaaa

● Wiederverwendbarkeit

● Testbarkeit

● Einheitliche UI

● Wartbarkeit

● Komponierbarkeit

Off

Page 39: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

UI-Komponenten im Detail - z.B. Button

Layout

Click me

Click me

Style

Click me

Click Me

Click me

Click Me

Model

External Model{ caption : ‘Click me’ isDisabled : false clickHandler: addAnItem ...}

Logic

If MouseDownThen pressedState = Pressed

If MouseUpThen pressedState = Unpressed clickHandler.call()Internal Model

{ pressedState : Pressed selectionState: NotSelected ...}

Page 40: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Interaktion einer Komponente mit Umwelt

Kind-UI-Komponente

Eltern-UI-Komponente

Public Model

StyleLayout

LogicInternal Model

Klare Schnittstelle für Interaktion mit Komponente

Daten / Einstellungen rein

Daten / Events raus

Page 41: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Aufgabe eines komponentenbasierten UI-Frameworks

Kind-UI-Komponente

Eltern-UI-Komponente

Public Model

StyleLayout

LogicInternal Model

Klare Schnittstelle für Interaktion mit Komponente

Daten / Einstellungen rein

Daten / Events raus

UI Framework

Page 42: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Später :P

Konkrete Beispiele?

Page 43: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Die Elm Architektur

Page 44: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Model View

Elm-Architektur

Model

Model Model

Model Model

Model

Model

View View

View

View View

View

View

View

Nicht Komponentenorientiert

Page 45: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Elm-Architektur

view : Model -> Html Msg

update : Msg -> Model -> (Model, Cmd Msg)

Initial Message+ Initial Model

New Model

Update Virtual DOM

Render Diff to Screen

Follow-Up Message

Events

User-Events like Clicks

ClockTicks, HTTP-Response, etc

Page 46: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

4 Grundzutaten eines Elm-Programms

// Message + Altes Modell => Neues Modell + Folgemessageupdate : Msg -> Model -> (Model, Cmd Msg)

// Model => HTML, welches Messages erzeugen kannview : Model -> Html Msg

// Typdefinition des Modelstype alias Model

// Eine Art Enum aller möglichen Messages der Apptype Message

Page 47: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

PendelPanda’s Komposition

Page 48: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Prototyp - Funktionsumfang

Page 49: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Komponenten

App

ActionBar

ButtonGrid

GridButton

Paw

Connection

Page 50: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Zeig denCode !!!

Page 51: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Anglular: PendelPanda.one

Elm: /elm/index.html

React: /react/index.html

Page 52: Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich

Timetravel Debugging