SlideShare ist ein Scribd-Unternehmen logo
1 von 94
Downloaden Sie, um offline zu lesen
ElmUma luz na Era das Trevas da
complexidade de UIs na web
http://example.com
http://example.com
Conteúdo estático
Estado na URL
http://example.com
http://example.com
Conteúdo dinâmico
Estado acumulado
durante uso
👈
2
2
👈
2
👈
1
Estado acumulado
durante uso
5
5
NaN
Mutação de estado
compartilhado
👎
Elm✨
header [] []
buttons
[ circle
, triangle
, square
]
bigTriangle [ color Dark ] square [ color Light ]
socialButtons
{ facebook = True
, twitter = False
, instagram = False
div []
[
]
div [] []
div [ class "main" ] []
div [] [ text "Oi!" ]
div []
[ span [] [ text "Oi!" ] ]
1
+
-
1
+
-
button [] [ text "+" ]
span [] [ text "1" ]
button [] [ text "-" ]
div []
[ button [] [ text "+" ]
, span [] [ text "1" ]
, button [] [ text "-"
]
div []
[ button [] [ text "+" ]
, span [] [ text "1" ]
, button [] [ text "-"
]
div []
[ button [] [ text "+" ]
, span []
[ text (toString model) ]
, button [] [ text "-"
]
Model é a única
fonte da verdade
👍
Model?
View
1
1
1
+
-
2
2
+
-
20
20
+
-
+button [] [ text "+" ]
+button [] [ text "+" ]
👈
+button [] [ text "+" ]
👈
Increment
+button [] [ text "+" ]
👈
Increment
Incremen
Increment
Increment
Increment
+button [] [ text "+" ]
👈
onClick Increment
+button [ onClick Increment ] [ text "+" ]
-button [ onClick Decrement ] [ text "+" ]
Decrement
1
0
Increment
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
update model msg =
case msg of
Increment -> model + 1
Decrement -> model - 1
Puro
Simples
Html Msg Html
main =
beginnerProgram
{ model = model
, view = view
, update = update
}
main =
beginnerProgram
{ model = model
, view = view
, update = update
}
Elm Runtime
Model
View
Update
Puro
Impuro
JavaScript
Simples
Elm Runtime
Model
View
Update
Elm Runtime
Msg
update
Html
Html
http
random
websockets
js
scroll
url
notificação
Random
Cmd Msg
Elm Runtime
Msg
update
Html
Elm Runtime
Msg
update
HtmlCmd
?button [ onClick Roll ] [ text "+" ]
?button [ onClick Roll ] [ text "+" ]
👈
Roll
Roll
Roll
RollRoll
update model msg =
case msg of
Increment -> (model + 1, Cmd.none)
Decrement -> (model - 1, Cmd.none)
Roll ->
( model
, Random.generate
Rolled
(Random.int 1 6)
)
update model msg =
case msg of
Increment -> (model + 1, Cmd.none)
Decrement -> (model - 1, Cmd.none)
Roll ->
( model
, Random.generate
Rolled
(Random.int 1 6)
)
update model msg =
case msg of
Increment -> (model + 1, Cmd.none)
Decrement -> (model - 1, Cmd.none)
Roll ->
( model
, Random.generate
Rolled
(Random.int 1 6)
)
update model msg =
case msg of
Increment -> (model + 1, Cmd.none)
Decrement -> (model - 1, Cmd.none)
Roll ->
( model
, Random.generate
Rolled
(Random.int 1 6)
)
Random.generate Rolled (Random.int 1 6)
update model msg =
case msg of
Increment -> (model + 1, Cmd.none)
Decrement -> (model - 1, Cmd.none)
Roll ->
( model
, Random.generate
Rolled
(Random.int 1 6)
)
Rolled num -> (num, Cmd.none)
Rolled 5
1+ -
?
1+ -
? 👈
Decrement
0+ -
?
👈 IncrementIncrement
2+ -
?👈Roll
2+ -
?👈Roll
🤖Rolled 5
5+ -
?
Elm Runtime
Msg
update
HtmlCmd
http
random
websockets
js
scroll
url
notificação
Html
Interações
representadas por
dados
👍
2
👈
Read 0
1Read 0
👈
Read 1
1Read 0
👈
Read 1
Unread 1
1Read 0
Read 1
Unread 2
1
Read 0
Read 1
Unread 2
2
Read 0
Read 1
Unread 2
👈
1
Read 0
Read 1
Unread 2
👈
0
Read 0
Read 1
Unread 2
👈
1
Read 0
Read 1
Unread 2
👈
Navegar entre estados
👍
Webapp Elm
Webapp Elm
🌎
Dados
Dados
Tipos
Funções puras
Arquitetura simples
É assim que o Elm
resolve a COMPLEXIDADE
gerada pela demanda
dos USUÁRIOS por
UIs INTERATIVAS
Comunidade pequena
🥀
Interoperação verbosa
Compilador exigente
guide.elm-lang.org
📚
elmlang.slack.com
t.me/elmbrasil
📬
@hugobessaa
hugobessa.com.br
🤙
Obrigado!

Weitere ähnliche Inhalte

Mehr von tdc-globalcode

Mehr von tdc-globalcode (20)

TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
 
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
 
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
 

Kürzlich hochgeladen

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 

Kürzlich hochgeladen (20)

GÊNERO CARTAZ - o que é, para que serve.pptx
GÊNERO CARTAZ - o que é, para que serve.pptxGÊNERO CARTAZ - o que é, para que serve.pptx
GÊNERO CARTAZ - o que é, para que serve.pptx
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Conflitos entre: ISRAEL E PALESTINA.pdf
Conflitos entre:  ISRAEL E PALESTINA.pdfConflitos entre:  ISRAEL E PALESTINA.pdf
Conflitos entre: ISRAEL E PALESTINA.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had a SRE team at - Elm, Uma luz na era das trevas da complexidade de UIs na web