Do you want to pick up from where you left of?
Take me there

Básico

Primeiros Passos, tipos básicos e operações básicas.

Primeiros Passos

Instalando Elixir

As instruções para instalação em cada sistema operacional podem ser encontradas em Elixir-lang.org na aba Install.

Após instalar o Elixir, você pode facilmente encontrar a versão instalada.

% elixir -v
Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir {{ site.elixir.version }}

Modo Interativo

Elixir vem com IEx, um console interativo, que nos permite avaliar expressões em Elixir.

Para iniciar, executamos iex:

Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir ({{ site.elixir.version }}) - press Ctrl+C to exit (type h() ENTER for help)
iex>

Nota: No Windows PowerShell, é necessário executar iex.bat.

Podemos testar e digitar algumas expressões simples:

iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("The quick brown fox jumps over the lazy dog")
43

Não se preocupe se não entender cada expressão ainda, mas esperamos que você compreenda a ideia.

Tipos Básicos

Inteiros

iex> 255
255

O suporte para números binários, octais e hexadecimais também estão inclusos:

iex> 0b0110
6
iex> 0o644
420
iex> 0x1F
31

Pontos Flutuantes

Em Elixir, os números de ponto flutuante requerem um decimal depois de pelo menos um dígito; estes possuem uma precisão de 64 bits e suportam e para números exponenciais:

iex> 3.14
 3.14
iex> .14
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10

Booleanos

Elixir suporta true e false como booleanos; todo valor é verdadeiro com exceção de false e nil:

iex> true
true
iex> false
false

Átomos

Um átomo é uma constante cujo o nome é seu valor. Se está familiarizado com Ruby, estes são equivalentes aos símbolos:

iex> :foo
:foo
iex> :foo == :bar
false

Booleanos true e false também são os átomos :true e :false, respectivamente.

iex> is_atom(true)
true
iex> is_boolean(:true)
true
iex> :true === true
true

Nomes de módulos em Elixir também são átomos. MyApp.MyModule é um átomo válido, mesmo se tal módulo ainda não tenha sido declarado.

iex> is_atom(MyApp.MyModule)
true

Átomos também são usados para referenciar módulos de bibliotecas Erlang, incluindo as bibliotecas integradas.

iex> :crypto.strong_rand_bytes 3
<<23, 104, 108>>

Strings

As strings em Elixir são codificadas em UTF-8 e são representadas com aspas duplas:

iex> "Hello"
"Hello"
iex> "dziękuję"
"dziękuję"

As strings suportam quebras de linha e caracteres de escape:

iex> "foo
...> bar"
"foo\nbar"
iex> "foo\nbar"
"foo\nbar"

Elixir também inclui tipos de dados mais complexos. Nós vamos aprender mais sobre estes quando aprendermos sobre coleções e funções.

Operações Básicas

Aritmética

Elixir suporta os operadores básicos +, -, *, e / como era de se esperar. É importante ressaltar que / sempre retornará um número ponto flutuante:

iex> 2 + 2
4
iex> 2 - 1
1
iex> 2 * 5
10
iex> 10 / 5
2.0

Se você necessita de uma divisão inteira ou o resto da divisão, Elixir vem com duas funções úteis para isto:

iex> div(10, 5)
2
iex> rem(10, 3)
1

Booleanos

Elixir provê os operadores booleanos ||, &&, e !. Estes suportam qualquer tipo:

iex> -20 || true
-20
iex> false || 42
42

iex> 42 && true
true
iex> 42 && nil
nil

iex> !42
false
iex> !false
true

Há três operadores adicionais cujo o primeiro argumento tem que ser um booleano (true e false):

iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (ArgumentError) argument error: 42
iex> not 42
** (ArgumentError) argument error

Nota: O and e or do Elixir são mapeados para andalso e orelse do Erlang.

Comparação

Elixir vem com todos os operadores de comparação que estamos acostumados a usar: ==, !=, ===, !==, <=, >=, < e >.

iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true

Para comparação de inteiros e pontos flutuantes usa-se ===:

iex> 2 == 2.0
true
iex> 2 === 2.0
false

Uma característica importante do Elixir é que qualquer tipo pode ser comparado; isto é particularmente útil em ordenação. Não precisamos memorizar a ordem de classificação, mas é importante estar ciente de que:

number < atom < reference < function < port < pid < tuple < map < list < bitstring

Isso pode levar a algumas comparações interessantes e válidas, que você pode não encontrar em outras linguagens:

iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false

Interpolação de Strings

Se você já usou Ruby, a interpolação de strings em Elixir parecerá muito familiar:

iex> name = "Sean"
"Sean"
iex> "Hello #{name}"
"Hello Sean"

Concatenação de Strings

A concatenação de strings usa o operador <>:

iex> name = "Sean"
"Sean"
iex> "Hello " <> name
"Hello Sean"
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!