elixir logoHá algum tempo a comunidade de software vem falando de linguagens e paradigmas funcionais. Ok, há bastante tempo. Várias décadas (mais do que as que eu tenho de vida). Eu decidi, depois de apenas passar o olho em Scala e F#, aprender algo funcional.

Há alguns anos eu já tenho ouvido falar de Elixir, uma linguagem funcional, construída sobre a VM do Erlang, e feita por um brasileiro. Eu comecei a ouvir falar de Elixir no meio da comunidade Ruby/Rails, pois é de lá que seu criador, José Valim, veio.

Este post é apenas um “simples desabafo” onde eu explico os motivos que me levaram a escolher o Elixir primariamente, apesar de eu estar estudando o paradigma funcional através de outras linguagens como Haskell e o próprio F# dentro do .NET.

Comunidade ativa

Há alguns dias, quando eu realmente decidi aprender Elixir, comecei a pesquisar um pouco mais sobre seus prós e contras. Suas principais características e sua tração dentro do mercado de desenvolvimento. Eu não esperava de nenhuma forma que Elixir fosse tão popular quanto C#, Java ou Javascript, e de fato não é. Mas eu também não esperava que já existisse uma comunidade tão vibrante e apaixonada por uma linguagem tão jovem. É por esta razão que eu decidi conhecer Elixir – uma comunidade apaixonada e ativa produz muitas coisas, troca muita informação e cresce e desenvolve-se com muita facilidade e rapidez. Ainda que eu não saiba se em um futuro próximo ela será um grande sucesso comercial (eu acredito que possa vir a ter a mesma importância que Ruby), o que eu sei por agora é que seus pontos fortes e promessas me levaram a querer aprender um pouco do mundo funcional através de seus olhos.

Tooling

Elixir vem de mais ou menos 2012, atingindo sua versão 1.0 em 2014. É algo bastante novo, e ainda assim já existe um enorme (e excelente) suporte de tooling. Isso é algo que eu passei a considerar antes mesmo da instalação. Eu não estou muito interessado em uma linguagem/plataforma que não me permita “sair codando” com apenas alguns cliques, alguns comandos ou um simples download. Eu também não quero, neste primeiro momento, me preocupar com os internals de uma linguagem só para fazer com que ela rode na minha máquina e eu possa experimentá-la – eu quero algo simples e bom.

Build tool

Elixir vem com uma ferramenta chamada Mix, que é o que eles chamam de “build tool”. Mix é responsável por tarefas como criar projetos, executar testes, rodar projetos, rodar tasks, etc. Me parece bastante interessante que uma linguagem nova tenha algo como este, pois demonstra facilidade para que iniciemos ou conhecemos a linguagem, além de demonstrar maturidade por parte de seus desenvolvedores e mantenedores. Além disso a linguagem não me limita a trabalhar com uma IDE ou ambiente específico para que eu possa criar meus projetos, rodar meus testes, etc. Utilizando o Mix eu consigo trabalhar na linha de comando em qualquer ambiente. Fazendo um paralelo, o Mix está para o Elixir assim como o dotnet ou dnx estão (ou deveriam estar) para o .NET (com a diferença, claro, que o Mix parece mais maduro).

Abaixo vemos algumas das tarefas que o Mix nos oferece (eu omiti pelo menos uma dezena de outras):

C:\proj\elixir> mix -h
mix                   # Runs the default task (current: "mix run")
mix cmd               # Executes the given command
mix compile           # Compiles source files
mix deps              # Lists dependencies and their status
mix new               # Creates a new Elixir project
mix run               # Runs the given file or expression
mix test              # Runs a project's tests

Gerenciador de pacotes

Toda linguagem moderna que se preze necessita de um gerenciador de pacotes. É impensável trabalhar com alguma tecnologia e ter que manualmente baixar pacotes e instalar dependências. Isso é coisa da década passada. E o Elixir também me surpreendeu quanto a isso. Hex, seu gerenciador de pacotes, além de ter um logo incrível (que remete ao pluralismo e inclusão) parece estar bastante maduro e em pleno funcionamento.
Pelo que eu pude compreender, Hex é um package manager para a VM do Erlang, com pleno suporte para Mix e Elixir, tendo surgido em 2014. Isso quer dizer que você pode usar Hex para trabalhar tanto com Erlang quanto com Elixir.

Hex - Package Manager

Hex - Package Manager

Hex – Package Manager

Instalação simplificada

E como não poderia deixar de ser, a instalação é bastante simples. Para Windows (que é o que estou usando neste momento) basta um instalador e seguir o padrão ‘nnf’. Confira aqui como instalar o Elixir no Windows, aqui se você estiver instalando Elixir no Mac ou aqui se estiver no Linux.

Após a instalação você poderá abrir seu terminal e digitar ‘iex.bat’ para acessar o prompt interativo do Elixir:

iex - Interactive Elixir

iex – Interactive Elixir

Sintaxe elegante e bonita

Eu sempre tive a opinião de que sintaxe, em uma linguagem, é algo que importa. Eu preciso me sentir confortável e preciso sentir que estou escrevendo um bom código. Não me agrada a idéia de passar meus dias escrevendo código em linguagens com sintaxes ruins, ainda que elas tenham seus pontos fortes. Eu ainda sinto muita falta no C# de poder usar ? e ! nos nomes de métodos, que é algo comum no Ruby (linguagem que eu considero como tendo uma sintaxe muito bonita). Quem nunca quis escrever “IsValid?()” ou “GoingToProduceCollateralDamageBeware!()”?!

Elixir possui uma sintaxe bastante elegante e por muito do que eu vejo, bastante inspirada no Ruby.

Elixir sintaxe

Elixir sintaxe

Elixir sintaxe

Elixir sintaxe

Como podemos ver, as estruturas “def”, “do” e “end”, o uso de “?” nos nomes dos métodos, mais para frente como veremos metaprogramação, os Atoms, e outras coisas, parecem intimamente ligadas à sintaxe do Ruby. Eu considero essa sintaxe bastante elegante. E uma coisa interessante é que o último resultado avaliado em uma função define seu retorno, não precisamos explicitamente usar a keyword “return”.

Próximos passos e materiais de estudo

Bem, eu estou estudando. Estou lendo a documentação do Elixir e tentando seguir os materiais de estudos que estão linkados no site deles.

Assim que eu tiver avançado um pouco mais, prometo que venho compartilhar com vocês. Eu sempre fico devendo continuar algumas “séries” de posts que eu começo, mas me cobrem.

Instalem o Elixir, façam uns testes com o iex e vamos trocando figurinhas.

Abraços,
Quaiats.