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

[Elixir Meetup São Paulo] Guia rápido para inic...

Avatar for Elaine Naomi Elaine Naomi
September 27, 2025

[Elixir Meetup São Paulo] Guia rápido para iniciantes sobre Elixir & OTP

Avatar for Elaine Naomi

Elaine Naomi

September 27, 2025
Tweet

More Decks by Elaine Naomi

Other Decks in Programming

Transcript

  1. Software Engineer/Developer (since 2008) B.Sc. in Computer Engineering M.Sc. in

    Computer Science ->>> IME-USP :) ELAINE NAOMI WATANABE speakerdeck.com/elainenaomi linkedin.com/in/elainenaomi Photo edited by AI :) slides
  2. quadrado = fn x -> x * x end quadrado.(3)

    # 9 Função como variável
  3. quadrado = fn x -> x * x end quadrado.(3)

    # 9 executa a função a partir da variável
  4. quadrado = fn x -> x * x end soma_2

    = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11 Função como argumento de entrada/parâmetro
  5. quadrado = fn x -> x * x end soma_2

    = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11 Função 1
  6. quadrado = fn x -> x * x end soma_2

    = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11 Função 2
  7. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  8. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  9. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  10. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  11. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  12. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  13. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  14. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  15. Função 1 como argumento (parâmetro) da Função 2 quadrado =

    fn x -> x * x end soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  16. replicador = fn n -> fn s -> String.duplicate(s, n)

    end end triplica = replicador.(3) triplica.("Oi") # "OiOiOi"
  17. replicador = fn n -> fn s -> String.duplicate(s, n)

    end end triplica = replicador.(3) triplica.("Oi") # "OiOiOi" Função 1
  18. replicador = fn n -> fn s -> String.duplicate(s, n)

    end end triplica = replicador.(3) triplica.("Oi") # "OiOiOi" Função 2
  19. replicador = fn n -> fn s -> String.duplicate(s, n)

    end end triplica = replicador.(3) triplica.("Oi") # "OiOiOi" Função como resposta de outra função
  20. Módulo List # Funções para lidar com listas Módulo String

    # Funções para lidar com cadeia de caracteres (texto) Módulo Time # Funções para lidar com o tempo exemplos
  21. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP Em OOP, objetos vão ter um estado interno Informações em memória sobre suas propriedades / atributos
  22. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP @count começa com 0 "informação interna"
  23. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  24. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  25. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  26. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  27. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  28. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  29. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3
  30. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3 "informação interna" mudou
  31. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3 o estado do objeto mudou
  32. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = 1 c.increment # @count = 2 c.increment # @count = 3 se esse estado for compartilhado?
  33. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = ? c.increment # @count = ? c.increment # @count = ? por exemplo: e se essas 3 chamadas fossem executadas ao mesmo tempo?
  34. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = ? c.increment # @count = ? c.increment # @count = ? qual seria o estado interno?
  35. class Counter def initialize @count = 0 end def increment

    @count = @count + 1 end end OOP c = Counter.new c.increment # @count = ? c.increment # @count = ? c.increment # @count = ? efeitos colaterais indesejados podem acontecer
  36. defmodule Counter do def increment(count) do count + 1 end

    end Counter.increment(1) # 2 Counter.increment(1) # 2 Counter.increment(1) # 2 Pure FP
  37. defmodule Counter do def increment(count) do count + 1 end

    end Counter.increment(1) # ? Counter.increment(1) # ? Counter.increment(1) # ? Pure FP
  38. defmodule Counter do def increment(count) do count + 1 end

    end Counter.increment(1) # 2 Counter.increment(1) # 2 Counter.increment(1) # 2 Pure FP
  39. defmodule Counter do def increment(count) do count + 1 end

    end Counter.increment(1) # 2 Counter.increment(1) # 2 Counter.increment(1) # 2 Pure FP A B f mesma entrada, mesma saída
  40. (linguagem) BEAM bytecode BEAM (Erlang VM) A BEAM vai abstrair

    como lidar com concorrência em cada máquina
  41. BEAM bytecode BEAM (Erlang VM) BEAM (Erlang VM) Inclusive pode

    rodar em máquinas diferentes (cluster)
  42. elixir BEAM process scheduler core process scheduler core Erlang/OTP +

    Bibliotecas + Primitivas de concorrência para a BEAM
  43. Sistemas web (Phoenix) Aplicações distribuídas e tolerantes a falhas (via

    OTP) Internet das Coisas/Sistemas embarcados (Nerves) Machine Learning/IA e Data Science (Nx, Axon, Livebook) Pipelines de processamento de dados e muito mais
  44. Até seu relógio tem mais de um processador. Concorrência não

    é mais a exceção, é regra. blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/ 2017
  45. ElixirConf 2018 - Erlang OTP What's in the Box -

    João Britto youtube.com/watch?v=CozSfI-Zepw