Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Aula 1 de Introdução a Elixir (09/03/2023)

livebooks/eleicao.livemd

Aula 1 de Introdução a Elixir (09/03/2023)

Sobre este livebook

Vídeo disponível em https://www.youtube.com/watch?v=UC4cIIHry1I.

Tipos básicos

1340
"Adolfo Neto 64646"
3.333356
10 / 3
:idade

Tipos básicos:

  • Números inteiros
  • Strings
  • Números de ponto flutuante
  • Átomos

Tipos Complexos

[]
[123, 676, 545]
["adolfo", 566, 683.78, :idade]
{133, "adolfo"}
{7676.33, "aldo", []}
%{"Adolfo" => 10, "Neto" => 20}
Map.keys(%{"Adolfo" => 10, "Neto" => 20})
Map.values(%{"Adolfo" => 10, "Neto" => 20})

Operadores

10 / 3
10 - 3
10 + 3 * 10
"ADOLFO " <> "NETO"
"ADOLFO" == "adolfo"
"ADOLFO" == "ADOLFO"

Funções

String.upcase("adolfo neto")
"ADOLFO" == String.upcase("adolfo")
String.capitalize("adolfo neto")
String.at("Adolfo", 3)

Criar suas próprias funções

defmodule Urna do
  def vota(nome_pessoa_candidata) do
    {nome_pessoa_candidata}
  end

  def vota(urna, numero, nome) do
    [{numero, nome} | urna]
  end

  def resultado(urna) do
    urna
    |> Enum.map(fn {_numero, pessoa} -> pessoa end)
    |> Enum.frequencies()
    |> Map.to_list()
  end

  def mostra_vencedor(lista) do
    {nome_vencedor, votos_vencedor} = Enum.max_by(lista, fn {_nome, votos} -> votos end)

    "A pessoa vencedora da eleição foi #{nome_vencedor} com #{votos_vencedor} votos."
  end
end
Urna.vota("José Valim")

Urna.vota("Joe Armstrong")

Urna.vota([], 26, "Robert Virding")
minha_urna = []

minha_urna = Urna.vota(minha_urna, 26, "Robert Virding")
minha_urna = Urna.vota(minha_urna, 177, "José Valim")
minha_urna = Urna.vota(minha_urna, 199, "Joe Armstrong")
minha_urna = Urna.vota(minha_urna, 255, "Mike Williams")
minha_urna = Urna.vota(minha_urna, 177, "José Valim")
[]
|> Urna.vota(26, "Robert Virding")
|> Urna.vota(177, "José Valim")
|> Urna.vota(199, "Joe Armstrong")
|> Urna.vota(255, "Mike Williams")
|> Urna.vota(177, "José Valim")
[]
|> Urna.vota(26, "Robert Virding")
|> Urna.vota(177, "José Valim")
|> Urna.vota(199, "Joe Armstrong")
|> Urna.vota(255, "Mike Williams")
|> Urna.vota(177, "José Valim")
|> dbg()

Calculando quem ganhou (depois que a eleição termina)

[]
|> Urna.vota(26, "Robert Virding")
|> Urna.vota(177, "José Valim")
|> Urna.vota(199, "Joe Armstrong")
|> Urna.vota(255, "Mike Williams")
|> Urna.vota(177, "José Valim")
|> Urna.vota(167, "Grace Hopper")
|> Urna.resultado()
|> Urna.mostra_vencedor()
|> dbg()

Funções do Módulo Enum

defmodule Matematica do
  def dobro(x) do
    x * 2
  end
end

Enum.map([10, 2, 45], &amp;Matematica.dobro/1)

Enum.map([10, 2, 45], fn x -> x * 2 end)

Enum.map([10, 2, 45], &amp;(&amp;1 * 2))