Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich mit Pizza und Bier.
Ein Prototyp, drei Implementierungen! Wo liegen Unterschiede und Gemeinsamkeiten? Erfahrungen und Meinungen aller Teilnehmer sind ausdrücklich erwünscht!
Speaker Bio:
Mohammed El Batya
Begeisterter Java/Spring-, Android-, Web-Entwickler ... also quasi ein "Full-Stack-Entwickler". Entwickler von PendelPanda für Android. Entdecken und Ausprobieren von neuen Technologien, Programmiersprachen und Frameworks ist mein Hobby!
Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
1. Angulardart 2 vs React vs Elm
Mohammed El Batya - Münchner Webwoche 2016
2.
3.
4. Mohammed El Batya
Wer bin ich?
Job 1: Lean Java Expert @ comSysto
Job 2: Freiberufl. Wirtschaftsinformatiker
Job 3: PendelPanda - Entwickler
Hobby: Spielen und Entdecken :)
30. ELM - Eigenschaften
● Rein funktional
● 100%tige Immutabilität
● Statische Typisierung
● Sonderbehandlung von Nebeneffekte
● Pseudo-HTML als Teil der Sprache
31. 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
33. ELM - Beispiel für Funktionen
Implementierung
Deklaration der Funktionssignatur
// Finde in der Liste Model.Buttons
// einen Button mit der gegebenen Button.Id
34. ELM - Beispiel für Funktionen im Detail
Funktionsname RückgabetypTypen der 2 Parameter
Namen der 2 Parameter
38. Komponentenbasierte UIs
Click me
Hottest Users
On
Bla bla blaaaaa
Bla bla blaaaaa la bla blaaaaa Bla bla
blaaaaa Bla bla blaaaaa Bla bla blaaaaa
● Wiederverwendbarkeit
● Testbarkeit
● Einheitliche UI
● Wartbarkeit
● Komponierbarkeit
Off
39. 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 MouseDown
Then
pressedState = Pressed
If MouseUp
Then
pressedState = Unpressed
clickHandler.call()Internal Model
{
pressedState : Pressed
selectionState: NotSelected
...
}
40. Interaktion einer Komponente mit Umwelt
Kind-UI-Komponente
Eltern-UI-Komponente
Public Model
StyleLayout
Logic
Internal Model
Klare Schnittstelle
für Interaktion mit Komponente
Daten / Einstellungen rein
Daten / Events raus
41. Aufgabe eines komponentenbasierten UI-Frameworks
Kind-UI-Komponente
Eltern-UI-Komponente
Public Model
StyleLayout
Logic
Internal Model
Klare Schnittstelle
für Interaktion mit Komponente
Daten / Einstellungen rein
Daten / Events raus
UI Framework
45. 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
46. 4 Grundzutaten eines Elm-Programms
// Message + Altes Modell => Neues Modell + Folgemessage
update : Msg -> Model -> (Model, Cmd Msg)
// Model => HTML, welches Messages erzeugen kann
view : Model -> Html Msg
// Typdefinition des Models
type alias Model
// Eine Art Enum aller möglichen Messages der App
type Message