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

Palestra na Universidade Federal da Bahia (UFBA)

2021/UFBA_v2.livemd

Palestra na Universidade Federal da Bahia (UFBA)

Elixir, a linguagem de programação brasileira de código aberto utilizada no mundo todo

Execute em uma Instalação de Livebook: Execute em uma Instalação de Livebook

Sobre o palestrante

Adolfo Neto é professor da UTFPR, criador e co-host do Emílias Podcast - Mulheres na Computação e membro do projeto Emílias - Armação em Bits.

Resumo

Uma breve introdução à linguagem Elixir. Vamos conhecer as principais características da linguagem e porque ela é boa até mesmo para iniciantes em programação.

O que é Elixir?

Elixir é mesmo uma linguagem brasileira?

Foi criada por José Valim em 2011-12. Mas isto é o suficiente para dizer que ela é brasileira?

Como se pronuncia Elixir?

  • Elichír
  • Elikzír
  • Élikzir
  • Elíkzir

É mesmo usada no mundo todo? Em produção?

É o assunto de várias conferências!

Isto aqui é o Livebook!

Tudo o que vocês estão vendo está sendo executado em uma instalação de Livebook, um software para a criação de nobebooks interativos com código em Elixir, dados e documentação.

As melhores características de Elixir

Funções na computação

Funções nomeadas em módulos

defmodule Saude do
  def calcula_imc(peso, altura) do
    peso / (altura * altura)
  end

  def peso_normal?(peso, altura) do
    imc = calcula_imc(peso, altura)
    imc >= 18.5 and imc <= 25
  end
end
IO.puts(Saude.calcula_imc(70, 1.8))
IO.puts(Saude.peso_normal?(70, 1.8))
IO.puts(Saude.peso_normal?(100, 1.8))

Funções anônimas

fn peso, altura -> peso / (altura * altura) end
imc = fn peso, altura -> peso / (altura * altura) end
imc.(100, 1.5)
&amp;(&amp;1 / (&amp;2 * &amp;2))
imc = &amp;(&amp;1 / (&amp;2 * &amp;2))
imc.(100, 1.5)

Funções matemáticas (puras)

Para as mesmas entradas, sempre retorna as mesmas saídas.

Não alteram o estado geral do sistema.

Não-funções matemáticas (funções impuras)

Para as mesmas entradas, a cada execução pode retornar uma saída diferente.

Exemplo:

Enum.shuffle([1, 2, 3, 4, 5, 6])

Ou alteram o estado geral do sistema.

A BEAM

Casamento de padrões (pattern matching)

  • Joker
  • Pin
  • lado esquerdo vs. lado direito
peso = 100
altura = 1.85

100 = peso

{peso, altura} = {120, 1.75}

{_, mensagem} = {:ok, "Deu tudo certo"}
peso
altura
mensagem

Sintaxe amigável (ex. omissão de parênteses)

IO.puts("Adolfo")

O Operador Pipe

[10, 30, 20, 8]
|> Enum.map(fn x -> x * 2 end)
|> Enum.sort(fn x, y -> x > y end)
|> Enum.sum()

Funções de Ordem Superior

f = fn x -> fn y -> x + y end end
g = f.(5)
g.(10)

Final

Acompanhe a comunidade