SlideShare uma empresa Scribd logo
1 de 122
Um melhor front end com
Elm
“Uma linguagem agradável para webapps
confiáveis.”
Gere JavaScript com ótimo desempenho e
sem exceções de tempo de execução.
Por que?
Elm é simples!
.smoosh()
Eu chamo isso de meu erro de bilhões
de dólares. Foi a invenção da referência
nula em 1965. Naquela época, eu
estava projetando o primeiro sistema de
tipos abrangente para referências em
uma linguagem orientada a objetos
(ALGOL W). Meu objetivo era garantir
que todo o uso de referências fosse
absolutamente seguro, com verificação
realizada automaticamente pelo
compilador.
Mas eu não pude resistir à tentação de
colocar uma referência nula, simplesmente
porque era tão fácil de implementar. Isso
levou a inúmeros erros, vulnerabilidades e
falhas no sistema, que provavelmente
causaram um bilhão de dólares de dor e
danos nos últimos
Confiança!
Confiança!
Esqueça o que você
ouviu sobre
programação
funcional. Palavras
extravagantes, idéias
estranhas,
ferramentas ruins.
OO patterns / principles FP patterns / principles
• Single Reponsability Principle
• Open / Close Principle
• Dependency Inversion Principle
• Interface Segragation Principle
• Factory Pattern
• Strategy Pattern
• Decorator Pattern
• Visitor Pattern
OO patterns / principles FP patterns / principles
• Functions• Single Reponsability Principle
• Open / Close Principle
• Dependency Inversion Principle
• Interface Segragation Principle
• Factory Pattern
• Strategy Pattern
• Decorator Pattern
• Visitor Pattern
OO patterns / principles FP patterns / principles
• Functions
• Functions
• Single Reponsability Principle
• Open / Close Principle
• Dependency Inversion Principle
• Interface Segragation Principle
• Factory Pattern
• Strategy Pattern
• Decorator Pattern
• Visitor Pattern
OO patterns / principles FP patterns / principles
• Functions
• Functions
• Functions
• Single Reponsability Principle
• Open / Close Principle
• Dependency Inversion Principle
• Interface Segragation Principle
• Factory Pattern
• Strategy Pattern
• Decorator Pattern
• Visitor Pattern
OO patterns / principles FP patterns / principles
• Functions
• Functions
• Functions
• Functions, also
• Single Reponsability Principle
• Open / Close Principle
• Dependency Inversion Principle
• Interface Segragation Principle
• Factory Pattern
• Strategy Pattern
• Decorator Pattern
• Visitor Pattern
OO patterns / principles FP patterns / principles
• Functions
• Functions
• Functions
• Functions, also
• Functions...
• Functions
• Functions
• Functions
• Single Reponsability Principle
• Open / Close Principle
• Dependency Inversion Principle
• Interface Segragation Principle
• Factory Pattern
• Strategy Pattern
• Decorator Pattern
• Visitor Pattern
Arquitetura “Elmish”
Unidirectional data flow
• Serviu de inspiração para o Redux
Como funciona?
Como funciona?
• Model / State
Como funciona?
• Model / State
• Message / Action
Como funciona?
• Model / State
• Message / Action
• Update / Reducer
Como funciona?
• Model / State
• Message / Action
• Update / Reducer
• View
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Mensagens de Erro
Incríveis
To-do demo!
Perguntas?

Mais conteúdo relacionado

Semelhante a Melhor front com Elm

InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...iMasters
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Treinamento Appium - Introdução
Treinamento Appium - IntroduçãoTreinamento Appium - Introdução
Treinamento Appium - IntroduçãoAndré Salla
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileWsdevs Desenvolvedores
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
Portando sua aplicação web para iphone
Portando sua aplicação web para iphonePortando sua aplicação web para iphone
Portando sua aplicação web para iphoneRenato Nitta
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosRafael Chaves
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Douglas Fischer
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Elaine Cecília Gatto
 

Semelhante a Melhor front com Elm (20)

InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Treinamento Appium - Introdução
Treinamento Appium - IntroduçãoTreinamento Appium - Introdução
Treinamento Appium - Introdução
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Portando sua aplicação web para iphone
Portando sua aplicação web para iphonePortando sua aplicação web para iphone
Portando sua aplicação web para iphone
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
MVC e Frameworks MVC
MVC e Frameworks MVCMVC e Frameworks MVC
MVC e Frameworks MVC
 
BDD-NamoroOn
BDD-NamoroOnBDD-NamoroOn
BDD-NamoroOn
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutos
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
 

Mais de Lucas Teles

Type script alem do arroz com feijao
Type script   alem do arroz com feijaoType script   alem do arroz com feijao
Type script alem do arroz com feijaoLucas Teles
 
Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Lucas Teles
 
TypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijãoTypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijãoLucas Teles
 
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...Lucas Teles
 
Algoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminhoAlgoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminhoLucas Teles
 
Algoritmos geneticos
Algoritmos geneticosAlgoritmos geneticos
Algoritmos geneticosLucas Teles
 
Aplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptxAplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptxLucas Teles
 
Simplificando componentes com react hooks
Simplificando componentes com react hooksSimplificando componentes com react hooks
Simplificando componentes com react hooksLucas Teles
 
F# para devs c# tdc
F# para devs c#   tdcF# para devs c#   tdc
F# para devs c# tdcLucas Teles
 
Introducao a azure functions
Introducao a azure functionsIntroducao a azure functions
Introducao a azure functionsLucas Teles
 
Block chain para desenvolvedores
Block chain para desenvolvedoresBlock chain para desenvolvedores
Block chain para desenvolvedoresLucas Teles
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareLucas Teles
 

Mais de Lucas Teles (15)

Type script alem do arroz com feijao
Type script   alem do arroz com feijaoType script   alem do arroz com feijao
Type script alem do arroz com feijao
 
Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​
 
TypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijãoTypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijão
 
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
 
Algoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminhoAlgoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminho
 
Algoritmos geneticos
Algoritmos geneticosAlgoritmos geneticos
Algoritmos geneticos
 
Aplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptxAplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptx
 
Simplificando componentes com react hooks
Simplificando componentes com react hooksSimplificando componentes com react hooks
Simplificando componentes com react hooks
 
C# 8 e além
C# 8 e alémC# 8 e além
C# 8 e além
 
F# para devs c# tdc
F# para devs c#   tdcF# para devs c#   tdc
F# para devs c# tdc
 
Introducao a azure functions
Introducao a azure functionsIntroducao a azure functions
Introducao a azure functions
 
F# para devs c#
F# para devs c#F# para devs c#
F# para devs c#
 
Block chain para desenvolvedores
Block chain para desenvolvedoresBlock chain para desenvolvedores
Block chain para desenvolvedores
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo software
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 

Melhor front com Elm

  • 1. Um melhor front end com Elm
  • 2.
  • 3. “Uma linguagem agradável para webapps confiáveis.”
  • 4. Gere JavaScript com ótimo desempenho e sem exceções de tempo de execução.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 15.
  • 16.
  • 17.
  • 18. Eu chamo isso de meu erro de bilhões de dólares. Foi a invenção da referência nula em 1965. Naquela época, eu estava projetando o primeiro sistema de tipos abrangente para referências em uma linguagem orientada a objetos (ALGOL W). Meu objetivo era garantir que todo o uso de referências fosse absolutamente seguro, com verificação realizada automaticamente pelo compilador.
  • 19. Mas eu não pude resistir à tentação de colocar uma referência nula, simplesmente porque era tão fácil de implementar. Isso levou a inúmeros erros, vulnerabilidades e falhas no sistema, que provavelmente causaram um bilhão de dólares de dor e danos nos últimos
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 27.
  • 28. Esqueça o que você ouviu sobre programação funcional. Palavras extravagantes, idéias estranhas, ferramentas ruins.
  • 29. OO patterns / principles FP patterns / principles • Single Reponsability Principle • Open / Close Principle • Dependency Inversion Principle • Interface Segragation Principle • Factory Pattern • Strategy Pattern • Decorator Pattern • Visitor Pattern
  • 30. OO patterns / principles FP patterns / principles • Functions• Single Reponsability Principle • Open / Close Principle • Dependency Inversion Principle • Interface Segragation Principle • Factory Pattern • Strategy Pattern • Decorator Pattern • Visitor Pattern
  • 31. OO patterns / principles FP patterns / principles • Functions • Functions • Single Reponsability Principle • Open / Close Principle • Dependency Inversion Principle • Interface Segragation Principle • Factory Pattern • Strategy Pattern • Decorator Pattern • Visitor Pattern
  • 32. OO patterns / principles FP patterns / principles • Functions • Functions • Functions • Single Reponsability Principle • Open / Close Principle • Dependency Inversion Principle • Interface Segragation Principle • Factory Pattern • Strategy Pattern • Decorator Pattern • Visitor Pattern
  • 33. OO patterns / principles FP patterns / principles • Functions • Functions • Functions • Functions, also • Single Reponsability Principle • Open / Close Principle • Dependency Inversion Principle • Interface Segragation Principle • Factory Pattern • Strategy Pattern • Decorator Pattern • Visitor Pattern
  • 34. OO patterns / principles FP patterns / principles • Functions • Functions • Functions • Functions, also • Functions... • Functions • Functions • Functions • Single Reponsability Principle • Open / Close Principle • Dependency Inversion Principle • Interface Segragation Principle • Factory Pattern • Strategy Pattern • Decorator Pattern • Visitor Pattern
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 89. • Serviu de inspiração para o Redux
  • 92. Como funciona? • Model / State • Message / Action
  • 93. Como funciona? • Model / State • Message / Action • Update / Reducer
  • 94. Como funciona? • Model / State • Message / Action • Update / Reducer • View
  • 95.
  • 96.
  • 97. Por que? A Model é imutável, o update é sempre chamado de forma síncrona, sem problemas com threads Sua model se torna a fonte única do estado da sua aplicação – Nunca mais controlar estado em múltiplas camadas Tendo uma UI virtual por baixo dos panos permite que você consiga realizar testes unitários em tudo – Model, View, Update Funções de View podem rodar fora da thread de UI se necessário
  • 98. Por que? A Model é imutável, o update é sempre chamado de forma síncrona, sem problemas com threads Sua model se torna a fonte única do estado da sua aplicação – Nunca mais controlar estado em múltiplas camadas Tendo uma UI virtual por baixo dos panos permite que você consiga realizar testes unitários em tudo – Model, View, Update Funções de View podem rodar fora da thread de UI se necessário
  • 99. Por que? A Model é imutável, o update é sempre chamado de forma síncrona, sem problemas com threads Sua model se torna a fonte única do estado da sua aplicação – Nunca mais controlar estado em múltiplas camadas Tendo uma UI virtual por baixo dos panos permite que você consiga realizar testes unitários em tudo – Model, View, Update Funções de View podem rodar fora da thread de UI se necessário
  • 100. Por que? A Model é imutável, o update é sempre chamado de forma síncrona, sem problemas com threads Sua model se torna a fonte única do estado da sua aplicação – Nunca mais controlar estado em múltiplas camadas Tendo uma UI virtual por baixo dos panos permite que você consiga realizar testes unitários em tudo – Model, View, Update Funções de View podem rodar fora da thread de UI se necessário
  • 101. Por que? A Model é imutável, o update é sempre chamado de forma síncrona, sem problemas com threads Sua model se torna a fonte única do estado da sua aplicação – Nunca mais controlar estado em múltiplas camadas Tendo uma UI virtual por baixo dos panos permite que você consiga realizar testes unitários em tudo – Model, View, Update Funções de View podem rodar fora da thread de UI se necessário
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 120.
  • 121.