21
INTRODUÇÃO A ELM: PROGRAMAÇÃO FUNCIONAL NO FRONT-END RODRIGO NONOSE MARINGÁ, 11. MARÇO. 2017.

RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

INTRODUÇÃO A ELM: PROGRAMAÇÃO FUNCIONAL NO FRONT-END

RODRIGO NONOSE

MARINGÁ, 11. MARÇO. 2017.

Page 2: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

● Introdução○ Contexto○ Problema○ Solução (?)

● Elm○ Programação Funcional○ Syntaxe Básica○ Arquitetura○ Tooling

Sumário

Page 3: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

IntroduçãoContexto

Page 4: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

IntroduçãoContexto

Page 5: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

● HTML, Javascript e CSS● Frameworks:

○ Gerenciar estado○ Promessas○ MVC, MVVM, MVP, MVVMCMPSCPMSC

● Arquitetura em camadas para arquitetura modular○ React, Redux

● Two-way binding● One-directional binding● Virtual DOM

IntroduçãoContexto

Page 6: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

IntroduçãoProblema

Page 7: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

IntroduçãoSolução(?)

Page 8: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript
Page 9: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmProgramação funcional

● Linguagem funcional compilada para javascript○ Compilador escrito em Haskell

● Estaticamente e fortemente tipada○ Systema de tipo Hindley-Milner

● Expressividade, conciso e autodocumentado○ Corpo da função consiste em um único statement○ Uma falha de compilação sem uma mensagem clara

é considerado bug● Imutabilidade e Transparência Referencial

○ Funções não têm efeito colateral○ Tipos imutáveis

Page 10: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmProgramação funcional

Page 11: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

Elm

Page 12: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

● Não existe null○ Sempre lidar com as duas possibilidades utilizando

um wrapper: Maybe● Não existe undefined function

○ Detectado em tempo de compilação

ElmProgramação funcional

Page 13: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

● Não existe null○ Sempre lidar com as duas possibilidades utilizando

um wrapper: Maybe● Não existe undefined function

○ Detectado em tempo de compilação

ElmProgramação funcional

Page 14: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmSyntaxe Básica

Page 15: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmArquitetura

Page 16: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmArquitetura

Model Update

View

MsgRender

Cmd

MsgSub

Msg

HTML

Page 17: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmArquitetura

MsgRender

Model

Model

Model

Model

View

View

View

View

Update

Page 18: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

ElmArquitetura

Page 19: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

● Compilador com mensagens de erro amigáveis● Elm Reactor: serve os arquivos e code-reload● Elm Formatter● Elm Package: previne quebra de versionamento

semântico● Debugger: Time Travel

ElmTooling

Page 20: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

● Compilador com mensagens de erro amigáveis● Elm Reactor: serve os arquivos e code-reload● Elm Formatter● Elm Package: previne quebra de versionamento

semântico● Debugger: Time Travel

ElmTooling

Page 21: RODRIGO NONOSE INTRODUÇÃO A ELM: PROGRAMAÇÃO …rhnonose.github.io/elm_intr.pdf · Introdução Solução(?) Elm Programação funcional Linguagem funcional compilada para javascript

FLW VLW