SlideShare uma empresa Scribd logo
1 de 101
Baixar para ler offline
Marcel Gonçalves dos Santos
@marcelgsantos
programação funcional
no front-end
a Elm
Introdução
pensandonaweb.com.br
desenvolvedor web full-stack
Marcel Gonçalves dos Santos
@marcelgsantos
@femugsp
sp.femug.com
@phpsp
phpsp.org.br
O que é Elm?
é uma linguagem de
programação funcional
projetada para o
front-end
Características
foi cuidadosamente
projetada por Evan Czaplicki
é poderosa e simples
de utilizar
possui tipagem forte e
estática
ou seja, sem erros em tempo de
execução!
de fácil depuração e
refatoração
melhor testabilidade
força o versionamento
semântico
Ambiente
possui instalador para
Windows e Mac
pode ser instalado
através do NPM
➜ npm intall -g elm
possui excelente suporte
para editores como
Atom e Sublime
pode-se utilizar o elm-format
e o elm-oracle para
formatação e auto-complete
e fazer a integração com o
editor de texto predileto
elm repl

ferramenta de read-eval-print
loop na linha de comando
elm make

ferramenta para compilação
de seu código Elm
elm package

ferramenta de gerenciamento
de pacotes do Elm
elm reactor

ferramenta que compila e cria
um servidor automaticamente
para rodar o seu projeto
Programação
Funcional
paradigma de programação
com foco em funções
matemáticas e na
transformação de estados
possui funções de alta ordem
e de primeira classe
as funções puras são funções
livres de efeitos colaterais
as funções puras são
reusáveis, componíveis,
testáveis, cacheáveis e
paralelizáveis
a aplicação parcial de
funções permite chamar uma
função passando parte de
seus argumentos
o currying é uma forma de
aplicação parcial de uma
função
a recursão é utilizada
para iteração
uma aplicação é composta
por estado e alteração do
estado
a imutabilidade permite um
melhor controle do estado
a programação funcional é
sobre eliminar o estado
quando possível e controlar o
estado quando necessário
é possível utilizar a
programação funcional em
linguagens não-funcionais
como JavaScript, PHP e Ruby
A linguagem
uma aplicação mínima
em Elm
module Main exposing (..)
import Html
main =
Html.text "Hello World!"
➜ elm package install elm-lang/html
um arquivo com as
dependências chamado
elm-package.json é criado
e também um diretório
chamado elm-stuff
➜ elm reactor
uma função em Elm
add x y = x + y
module Main exposing (..)
import Html
add x y =
x + y
main =
Html.text ("1 + 2 is " ++ (toString (add 1 2)))
podemos utilizar o operador
pipe|> semelhante a linha
de comando Unix
module Main exposing (..)
import Html
import String
add x y =
x + y
main =
add 1 2
|> toString
|> String.append "1 + 2 is "
|> Html.text
para criar funções anônimas
utilizamos a barra invertida
module Main exposing (..)
import Html
import List
numbers =
[ 1, 2, 3 ]
main =
List.map (a -> a * 2) numbers
|> toString
|> Html.text
podemos utilizar o operador
de composição >> para fazer
composição de funções
module Main exposing (..)
import Html
import List
double x =
x * 2
plus1 x =
x + 1
doublePlus1 =
double >> plus1
main =
List.map doublePlus1 [ 1, 2, 3 ]
|> toString
|> Html.text
o currying de funções é
feito automaticamente
module Main exposing (..)
import Html
add x y =
x + y
plus1 =
add 1
main =
plus1 9
|> toString
|> Html.text
é possível definir valores
locais utilizando o
bloco let..in
module Main exposing (..)
import Html
import String
joinUpper x y =
let
text =
x ++ y
in
String.toUpper text
main =
joinUpper "hello " "world"
|> Html.text
e definir condições utilizando
o bloco if..then…else
pattern matching é uma
funcionalidade muito
importante
o Elm possui tipos primitivos
como String, Char, Bool,
Float e number
o tipo List representa uma
lista de valores todos do
mesmo tipo
module Main exposing (..)
import Html
import List
numbers =
[ 1, 2, 3 ]
main =
List.map (a -> a * 2) numbers
|> toString
|> Html.text
o tipo tupla representa uma
lista ordenada de valores,
por exemplo (“pi”, 3.14)
o tipo record representa
uma estrutura de dados
semelhante a um objeto em
JavaScript
module Main exposing (..)
import Html
import String
person =
{ name = "James", age = 42 }
main =
String.append "Hello " person.name
|> Html.text
em Elm, as estruturas de
dados são imutáveis
module Main exposing (..)
import Html
import String
person =
{ name = "James", age = 42 }
newPerson =
{ person | age = 32 }
main =
"My age is "
++ (toString newPerson.age)
|> Html.text
tipos mais complexos
podem ser representados
através de union types
as union types assemelham-
se a enumerações de tipos
diferentes
type Msg
= Edit Player
| Score Player Int
| Input String
| Save
| Cancel
| DeletePlay Play
os type aliases permite criar
novos tipos a partir de tipos
existentes
type alias Player =
{ id : Int
, name : String
, points : Int
}
type alias Play =
{ id : Int
, playerId : Int
, name : String
, points : Int
}
type alias Model =
{ players : List Player
, name : String
, playerId : Maybe Int
, plays : List Play
}
o tipo Maybe é uma union
type que pode ter ou não um
valor
type Maybe a
= Just a
| Nothing
as anotações de tipo são
utilizadas para informar o
tipo de entrada e saída de
uma função ou constante
module Main exposing (..)
import Html
add : Int -> Int -> Int
add x y =
x + y
main =
"2 + 3 is "
++ toString (add 2 3)
|> Html.text
a anotação de tipos é
opcional em Elm
o compilador pode
inferir os tipos
Aplicação Elm
uma aplicação Elm possui
três partes: model, view e
update
a model é um contêiner que
armazena os dados que a
aplicação necessita
a model pode ser um tipo
primitivo como um Int ou
String ou um tipo complexo
como um Record
o update é responsável por
atualizar a model ou estado
da aplicação
na seção update definimos
(1) o que pode acontecer na
aplicação e (2) como a
model é atualizada
a função update retorna
uma nova model atualizada
a view é responsável por criar
uma representação visual do
estado da aplicação
a view é criada de maneira
declarativa
as funções responsáveis pela
criação das tags HTML
possuem assinaturas
consistentes
a função beginnerProgram é
responsável por juntar as três
partes de uma aplicação Elm
o módulo Html.App é
responsável por: (1) manter o
estado da aplicação, (2)
gerenciar as mensagens e (3)
chamar view e update
Quem usa?
* Prezi
* NoRedInk
* Adobe
* Serenata de Amor (Jarbas)
Empresas e projetos
Referências
* elm-lang.org
* www.elm-tutorial.org
* learnxinyminutes.com/docs/elm
* bit.ly/vamos-aprender-elm
* bit.ly/aprenda-elm-em-y-minutos
* elmweekly.nl
Tutoriais e vídeos
* @czaplic
* @rtfeldman
* @jessitron
* @_rchaves_
* @cuducos
* @elmlang
* @elmweekly
* @elmconf
Quem seguir no Twitter?
Avalie!
bit.ly/avalie-elm-floripa
Perguntas?
Obrigado.
@marcelgsantos
speakerdeck.com/marcelgsantos

Mais conteúdo relacionado

Semelhante a TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at JavaScript

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
Armando Daniel
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
Fabio Spanhol
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
michellobo
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch
Marcio Pereira
 

Semelhante a TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at JavaScript (20)

Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
Excel Basic com VBA - Macros
Excel Basic com VBA - MacrosExcel Basic com VBA - Macros
Excel Basic com VBA - Macros
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Haskell
HaskellHaskell
Haskell
 
Cap07
Cap07Cap07
Cap07
 
Cap07
Cap07Cap07
Cap07
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Apostila de-vb-net
Apostila de-vb-netApostila de-vb-net
Apostila de-vb-net
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - Android
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Tutorial Python - 1
Tutorial Python - 1Tutorial Python - 1
Tutorial Python - 1
 

Mais de tdc-globalcode

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
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
 

Último

Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
azulassessoria9
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 

Último (20)

Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
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...
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
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
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
 
Novena de Pentecostes com textos de São João Eudes
Novena de Pentecostes com textos de São João EudesNovena de Pentecostes com textos de São João Eudes
Novena de Pentecostes com textos de São João Eudes
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
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.
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdf
 

TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at JavaScript