Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Usando Elm para desenhar um frontend de fazer i...

Usando Elm para desenhar um frontend de fazer inveja

Nessa palestra eu introduzo os principais aspectos da linguagem, que é puramente funcional (e por isso carrega todas as características de uma linguagem funcional) e foi feita para ser usada no frontend.

* a imagem que apresenta o fluxo de uma aplicação Elm (slide 17) foi retirada de uma oficina apresentada por Roberto e Rogério [1]

[1]: http://robertosoares.me/oficina-elm/#/

Other Decks in Programming

Transcript

  1. Maybe? type Maybe a = Nothing | Just a >

    Nothing Nothing : Maybe a > Just <function> : a -> Maybe a > Just "oi" Just "oi" : Maybe String > Just 3.14 Just 3.14 : Maybe Float 12
  2. Maybe! type alias User = { nome : String ,

    idade : Maybe Int } edu = { nome = "Edu", idade = Nothing } ardo = { nome = "Ardo", idade = Just 25 } podeBeber usuario = case usuario.idade of —— Elm te obriga a tratar Nothing -> todos os casos False Just idade -> idade >= 21 13
  3. arquitetura —— model estado da sua aplicação —— update recebe

    um estado atual e retorna um novo model —— view uma forma de enxergar o estado, em HTML 16
  4. 17

  5. ferramentas embutidas —— repl $ elm-repl —— compilador $ elm-make

    —— gerenciador de pacotes $ elm-package —— servidor de desenvolvimento $ elm-reactor 18
  6. 21

  7. principais tipos —— valores 42 : number 'e' : Char

    "rsjs" : String (12, "que horas é o almoço?") : (number, String) [8, 7, 6] : List number {x = 6, y = 8} : { x: number, y: number } —— aliases type alias Ponto = { x : number, y : number } 22
  8. funções add : number -> number -> number add x

    y = x + y > add 4 5 9 : number 23
  9. map, filter e piping menorQueDois item = item < 2

    quadrado numero = numero * numero menoresQueDois lista = 
 List.filter menorQueDois lista 
 tudoAoQuadrado lista = List.map quadrado menoresQueDois minhaLista
 |> tudoAoQuadrado 24
  10. inferência de tipos add x y = x + y

    <function> : number -> number -> number add : number -> number -> number add x y = x + y horaDoAlmoco : Boolean horaDoAlmoco = True 25
  11. funções parcialmente aplicadas add : number -> number -> number

    add x y = x + y > add 4 5 9 : number > add4 = add 4 add : number -> number > add4 5 9 : number 26
  12. imutabilidade ponto = { x = 3, y = 5

    } —— você pode ler ponto.x —— mas não pode alterar assim ponto.x = 4 —— mas assim pode outroPonto = { ponto | x = 4 } 27
  13. view model = div [ class "content" ] [ h1

    [] [ text model.nome ] ] e HTML, comofas?! view model = div [] [
 input [ type "text"] [] , div [] [ text (String.reverse "ualbax") ]
 ] 28
  14. module Main exposing (..) import Html exposing (..) import Html.Attributes

    exposing (class) model = { nome = "Edu" } view model = div [ class "content" ] [ h1 [] [ text model.nome ] ] update model = 
 model main = Html.beginnerProgram { view = view , update = update , model = model } agora tudo junto 29
  15. e pra instalar? $ npm install -g elm
 pacotes de

    instalação (windows e mac) 
 repositório: https://github.com/elm-lang/elm-platform 30