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

Elixir & OTP 101 - Guia para iniciantes

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Elixir & OTP 101 - Guia para iniciantes

Avatar for Elaine Naomi

Elaine Naomi

September 08, 2026

More Decks by Elaine Naomi

Other Decks in Programming

Transcript

  1. ELAINE NAOMI WATANABE Software Engineer/Developer (since 2008) Staff Software Engineer

    (since 2023) B.Sc. in Computer Engineering M.Sc. in Computer Science speakerdeck.com/elainenaomi Photo edited by AI :) linkedin.com/in/elainenaomi slides
  2. quadrado = fn x -> x * x end quadrado.(3)

    executa a função a partir da variável # 9
  3. Função como argumento de entrada/parâmetro quadrado = fn x ->

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

    1 soma_2 = fn f, v -> f.(v) + 2 end soma_2.(quadrado, 3) # 11
  5. quadrado = fn x -> x * x end soma_2

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

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

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

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

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

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

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

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

    end end triplica = replicador.(3) triplica.("Oi") # "OiOiOi" Função 2
  14. 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
  15. replicador = fn n -> fn s -> String.duplicate(s, n)

    end end triplica = replicador.(3) triplica.("Oi") # "OiOiOi"
  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"
  18. Módulo List Módulo String # Funções para lidar com listas

    # Funções para lidar com cadeia de caracteres (texto) Módulo Time # Funções para lidar com o tempo exemplos
  19. class Counter def initialize @count = 0 Em OOP, objetos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @count = @count + 1 end c = Counter.new c.increment # @count = ? c.increment # @count = ? c.increment # @count = ? efeitos colaterais indesejados podem acontecer end OOP
  34. 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
  35. defmodule Counter do def increment(count) do count + 1 end

    end Counter.increment(1) # ? Counter.increment(1) # ? Counter.increment(1) # ? Pure FP
  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 B A f def increment(count) do count

    + 1 end end mesma entrada, mesma saída Counter.increment(1) # 2 Counter.increment(1) # 2 Counter.increment(1) # 2 Pure FP
  38. A BEAM vai abstrair como lidar com concorrência em cada

    máquina (linguagem) BEAM bytecode BEAM (Erlang VM)
  39. Erlang/OTP + Bibliotecas + Primitivas de concorrência para a BEAM

    elixir BEAM process process scheduler scheduler core core
  40. 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
  41. 2017 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/
  42. ElixirConf 2018 - Erlang OTP What's in the Box -

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