# 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: [](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fadolfont%2Fpensandoemelixir%2Fblob%2Fmain%2F2021%2FUFBA_v2.livemd)
<!-- UFBAUTFPR2021 adolfont.fly.dev -->
* Quando? 22/11 (SEG) 13:00-15:00
* Onde? Informação privada.
* Página da disciplina: [MATA56 - Paradigmas de Linguagens de Programação](https://github.com/mata56-ic-ufba/paradigmas)
## 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.
<!-- livebook:{"break_markdown":true} -->
### O que é Elixir?
* [Site de Elixir](https://elixir-lang.org/)
* [Página na Wikipédia sobre Elixir](https://pt.wikipedia.org/wiki/Elixir_(linguagem_de_programa%C3%A7%C3%A3o))
### 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?
* Eli*chír*
* Elikzír
* Élikzir
* Elíkzir
### É mesmo usada no mundo todo? Em produção?
* Escutem a série Elixir em Produção do podcast [Elixir em Foco](https://anchor.fm/elixiremfoco/)
* Um dos [6 podcasts ativos relacionados a Elixir ou á BEAM](https://elixirschool.com/en/podcasts)
* Elixir é a [quarta linguagem com melhor fator amada/temida da pesquisa com usuários do StackOverflow de 2021](https://insights.stackoverflow.com/survey/2021#technology-most-loved-dreaded-and-wanted) e está em [posição 17 entre as mais desejadas](https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted-language-want).
* Na mesma pesquisa, é a [terceira que paga melhor](https://insights.stackoverflow.com/survey/2021#technology-top-paying-technologies).
* Empresas que usam Elixir [1](https://serokell.io/blog/elixir-in-production),
[2](https://dashbit.co/blog/ten-years-ish-of-elixir), [3](https://elixir-lang.org/cases.html), [4](https://www.hostgator.com.br/blog/elixir-linguagem-programacao-brasileira/), [5](https://github.com/elixirbrasil/empresas)
* [Empregos para Devs Elixir](https://elixir-radar.com/jobs)
### É o assunto de várias conferências!
* [Elixir Brasil](https://twitter.com/elixir_brasil) - 27 e 28 de novembro de 2021
* ElixirConf: [Europe](https://www.elixirconf.eu/), [USA/World](https://www.elixirconf.com/), [Africa](https://elixirconf.africa/)
* Code BEAM. A mais recente foi a [Code BEAM America 2021](https://codesync.global/conferences/code-beam-sf-2021/)
* [Code BEAM BR](https://www.codebeambr.com/)
## 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.
* Repositório de código aberto: https://github.com/livebook-dev/livebook
* Site: http://livebook.dev
* Você pode testar de graça no https://fly.io/!!!
## As melhores características de Elixir
## Funções na computação
## Funções nomeadas em módulos
```elixir
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
```
```elixir
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
```elixir
fn peso, altura -> peso / (altura * altura) end
```
```elixir
imc = fn peso, altura -> peso / (altura * altura) end
imc.(100, 1.5)
```
```elixir
&(&1 / (&2 * &2))
```
```elixir
imc = &(&1 / (&2 * &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:
```elixir
Enum.shuffle([1, 2, 3, 4, 5, 6])
```
Ou alteram o estado geral do sistema.
## A BEAM
* [Introduction to Erlang](https://serokell.io/blog/introduction-to-erlang)
## Casamento de padrões (pattern matching)
* *Joker*
* *Pin*
* lado esquerdo vs. lado direito
```elixir
peso = 100
altura = 1.85
100 = peso
{peso, altura} = {120, 1.75}
{_, mensagem} = {:ok, "Deu tudo certo"}
```
```elixir
peso
```
```elixir
altura
```
```elixir
mensagem
```
## Sintaxe amigável (ex. omissão de parênteses)
```elixir
IO.puts("Adolfo")
```
## O Operador Pipe
```elixir
[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
```elixir
f = fn x -> fn y -> x + y end end
```
```elixir
g = f.(5)
```
```elixir
g.(10)
```
## Final
* Responder as perguntas do início
* Elixir é brasileira? [É uma linguagem globalizada](https://youtu.be/e335dWkFyUU)
* Como se pronuncia Elixir? ["Não importa, o importante é que você chame"](https://youtu.be/e335dWkFyUU)
### Acompanhe a comunidade
* [Elixir Brasil 2021](https://twitter.com/elixir_brasil/)
* [Advent of Code 2021 com José Valim](https://twitter.com/josevalim/status/1461064540465078273)
* https://twitter.com/elixir_utfpr
* https://twitter.com/adolfont
* https://twitter.com/elixiremfoco
* https://www.youtube.com/c/AdolfoNeto
* [Elixir, Erlang and the BEAM with Adolfo Neto](https://www.youtube.com/channel/UC6ETZk7tlYJzfRz-zS9B6xw)
* [Erlang Ecosystem Foundation](https://erlef.org/)
* Telegram (Elixir Brasil, ELUG_CE)