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

Programação Funcional & Elixir

7c1e5b1b100ab8cfacbe14173437c998?s=47 Amanda
November 04, 2017

Programação Funcional & Elixir

7c1e5b1b100ab8cfacbe14173437c998?s=128

Amanda

November 04, 2017
Tweet

Transcript

  1. Programação Funcional & Elixir

  2. @amandasposito @amsposito @amandasposito

  3. None
  4. Falando um pouco de história

  5. http://www.gotw.ca/publications/concurrency-ddj.htm

  6. None
  7. None
  8. “Efficiency and performance optimization will get more, not less, important.”

  9. “Applications will increasingly need to be concurrent if they want

    to fully exploit continuing exponential CPU throughput gains.”
  10. Por que isso afeta nossa aplicação?

  11. None
  12. Elixir criada por José Valim

  13. Percebeu que as ferramentas que existiam não eram boas para

    concorrência
  14. None
  15. Elixir roda em cima da maquina virtual do Erlang

  16. Erlang é conhecido por rodar aplicações com latência baixa, distribuídas

    ou tolerante a falhas
  17. Escalabilidade Tolerância a falhas Compatível com Erlang Hot Code Swap

    Linguagem Dinâmica Metaprogramação Polimorfismo Concorrência
  18. Diferentes paradigmas

  19. Paradigma Funcional

  20. –Introduction to Functional Programming - Richard Bird Philip Wadler “Programming

    in a functional language consists of building definitions and using the computer to evaluate expressions.”
  21. Imutabilidade

  22. Consistência de dados

  23. Concorrência Capacidade de lidar com várias coisas ao mesmo tempo

  24. https://blog.whatsapp.com/196/1-million-is-so-2011?

  25. Vamos resolver um problema

  26. None
  27. None
  28. switch = fn (bulb) -> ... end switch.(bulb)

  29. defmodule LightBulb do def switch(human, bulb) do end end LightBulb.switch(bulb)

  30. Pattern Matching

  31. name = "Amanda"

  32. Interactive Elixir (1.5.2) - press Ctrl+C to exit (type h()

    ENTER for help) iex(1)> name = "Amanda" "Amanda" iex(2)> "Amanda" = name "Amanda" iex(3)> "Amanda S" = name ** (MatchError) no match of right hand side value: "Amanda"
  33. defmodule LightBulb do def switch(human = %Human{}, bulb = %Bulb{})

    … end end
  34. Function Arity

  35. defmodule LightBulb do def switch(human, bulb) do ... end def

    switch(_) do IO.puts "Precisamos de um humano e de uma escada." end end
  36. Guards

  37. defmodule LightBulb do def switch(human, bulb) when bulb.burned_out == true

    do … end end
  38. If and unless

  39. defmodule LightBulb do def switch(human, bulb) when bulb.burned_out == true

    do ladder = Ladder.get_average_height() if ladder.under do … end end end
  40. Pipe Operator

  41. new_bulb = Bulb.get_bulb() lader = Ladder.get_average_height() human = Human.climb(human, ladder)

    human = Human.remove_bulb(human, bulb) human = Human.put_bulb(human, new_bulb)
  42. Ladder.get_average_height() |> Human.climb(human) |> Human.remove_bulb(bulb) |> Human.put_bulb(new_bulb)

  43. None
  44. Recursão

  45. numbers = 3; for(i = numbers; i > 0; i--)

    { console.log(i); }
  46. None
  47. defmodule NaturalNums do # Uma clausula para parar a recursão

    def print(1), do: IO.puts(1) def print(n) do # Imprime o número" IO.puts(n) # Chama a si mesmo com um valor a menos print(n - 1) end end
  48. iex(1)> NaturalNums.print(3) 3 2 1 :ok

  49. None
  50. None
  51. https://www.codeschool.com/courses/try-elixir

  52. https://www.dailydrip.com/topics/elixir https://github.com/dailydrip/firestorm

  53. http://plataformatec.com.br/elixir-radar

  54. None
  55. Obrigada!

  56. Referências • https://hipsters.tech/elixir-a-linguagem-hipster- hipsters-48/ • https://codewords.recurse.com/issues/one/an- introduction-to-functional-programming • http://theerlangelist.blogspot.com.br/2013/05/working- with-immutable-data.html