Primeiros passos com Elixir (Módulos, Funções, Aridade das Funções e Pipe Operator)

Se você já se convenceu que deve aprender Elixir para se tornar um programador melhor, comece então a dar os primeiros passos no entendimento dessa linguagem e paradigma.

Antes de mais nada, vamos focar no entendimento da linguagem (ou seja, não vou mostrar nenhum tipo de instalação) e para isso usaremos a ferramenta “Compile Online” (http://www.compileonline.com/execute_elixir_online.php) que permite executarmos todos os testes direto no navegador.

A primeira coisa que precisamos entender é que o Elixir é uma linguagem que utiliza o paradigma funcional, e isso, resumidamente, quer dizer que usaremos funções para resolver nossos problemas.

IO.puts

Para começar, podemos imprimir um texto na “tela”. Para isso use a função IO.puts. Sendo assim, IO.puts(“Olá mundo!”) imprimirá na tela “Olá mundo!”.

Com esse exemplo podemos entender que usamos a função puts que está no módulo IO, o que nos leva a entender que o módulo IO pode conter outras funções, e é assim que o Elixir trabalha, agrupando funções em módulos.

Você pode consultar as várias outras funções que estão no módulo IO através da documentação (https://hexdocs.pm/elixir/IO.html).

O módulo String

Como você deve ter percebido, existem diversos outros módulos com suas respectivas funções, dentre eles temos o módulo String(https://hexdocs.pm/elixir/String.html#content) que possui a função length, que tem por objetivo mostrar a quantidade de caracteres de uma String. Ou seja, o resultado para IO.puts(String.length(“Olá”)) é 3.

Até aqui nenhuma novidade, mas, você começará a notar que, na documentação as funções aparecem, na maioria das vezes, listadas com algum número na frente, assim… String.length/1 ou, no caso do módulo IO, IO.puts/1.

Esse número que aparece logo após a barra, nada mais é do que a indicação da quantidade de parâmetros que a função deve receber, ou seja, no caso de /1, quer dizer que essa função deve receber apenas 1 parâmetro. A isso dá-se o nome de “aridade da função”. Sendo assim, String.length/1 indica que devemos passar apenas 1 parâmetro para a função, nesse caso, um texto.

Pipe Operator

Não sei você, mas no nosso exemplo anterior, IO.puts(String.length(“Olá”))fica uma sensação de bagunça, visto que aninhamos o resultado de uma função dentro de outra. Então, para organizar um pouco melhor o código, normalmente resolveríamos assim…

str_len = String.length(“Olá”)
IO.puts(str_len)

Até aí nada de errado, visto que fica mais legível o que está ocorrendo, no entanto, quando você começar a usar o Elixir, perceberá que esses aninhamentos acabam sendo coisas corriqueiras então a quantidade de variáveis “auxiliar” vão se tornar gigantes. Mas esse problema pode ser resolvido de uma forma elegante, usando o Pipe Operator “|>”.

O pipe operator que é essa barrinha em pé “|” seguida do símbolo de maior “>”, é um recurso utilizado para enviar o retorno de uma função para o primeiro parâmetro da próxima função (é uma ideia muito comum para quem vem do mundo *nix). Veja.

String.length("Olá!") |> IO.puts

Isso quer dizer que o resuldado de String.length(“Olá”) será enviado para a função IO.puts, então isso…

IO.puts(String.length(“Olá”))

é igual a isso…

String.length("Olá!") |> IO.puts

Simples, não?

Melhor ainda é que você pode encadear quantos pipes operators quiser. Veja como ainda pode ficar nosso exemplo…

"Olá!" |> String.length |> IO.puts

Ahh, também é muito comum usar o pipe operator na linha logo abaixo, o que facilita ainda mais a leitura. Veja…

"Olá!"
|> String.length
|> IO.puts

Legal, hein!? 🙂 (tá aí um recurso que o Ruby poderia implementar nativamente. hehe!)

Bom, por enquanto é isso. Espero que tenho gostado dessa introdução e fica atento que logo teremos novidades! 😉

Um forte abraço, e claro, como sempre, não esquece de nos seguir e curtir nas redes sociais. Vlw!