Elixir Para Quem Vem do C#

Pedro Henrique Barbiero
4 min readMay 22, 2019

Uma visão de quem não vem do mundo Ruby.

No final de 2018, eu lia alguns códigos aleatórios de algumas linguagens aleatórias, ai que a linguagem de programação Elixir me chamou a atenção. Tudo começou pelo operador |> , poucos minutos depois me encontrei entusiasmado lendo todo o getting started, descobrindo coisas como átomos, tuplas e imutabilidade, além de estar encantado com a facilidade da sintaxe. Me interessei pela linguagem e estudei um pouco mais a fundo sobre o porquê dela, descobri muitas coisas como tolerância a falhas, suporte a concorrência e produtividade.

Eu queria testar a linguagem, para isso tentei pesquisar algumas ferramentas de persistência de dados, além de IDE’s e frameworks web. Uma googlada me deu várias respostas, a maioria fazendo comparações com ferramentas do mundo Ruby. Só tinha um problema: eu não sei Ruby (no momento em que escrevo isso).

Escrevo este post para pessoas que já sabem C#, a ideia é fazer comparações entre o básico da sintaxe de ambas e do ecossistema em volta delas. Algumas comparações podem não agradar nem desenvolvedores C# nem desenvolvedores Elixir, mas eu sei do risco e quero continuar. A intenção não é dizer qual linguagem é melhor ou pior, afinal, não existe bala de prata.

Paradigma

Tanto C# quanto Elixir são multiparadigmas, onde a primeira é principalmente orientada a objetos, interpretada pela Common Language Runtime enquanto a segunda é maiormente funcional executada sob a maquina virtual do Erlang.

C# é estaticamente tipada, enquanto Elixir é dinamicamente tipada. Isso significa que no C# é necessário declarar qual tipo de dados uma determinada variável irá receber. Apesar de existir a palavra reservada var, o tipo de dado será o do primeiro valor recebido.

Qual é mais fácil de aprender?

Aparentemente a resposta lógica seria C#, visto que possui uma sintaxe influenciada por linguagens bem conhecidas com C++, Object Pascal e Java. Além disso, é uma linguagem orientada a objetos, como a maioria das pessoas desenvolvedoras de software estão acostumadas. Mas na verdade C# só parece ser mais fácil pois temos uma “bagagem” com orientação a objetos. Ao meu ver, Elixir possui uma sintaxe mais simples e com menos palavras reservadas.

Nenhuma é mais fácil ou mais difícil, são apenas formas diferentes de programar. Talvez, se fosse ensinado programação funcional ao invés de OO nas universidades e cursos, as pessoas considerariam Elixir mais fácil que C#.

Interface de desenvolvimento

Para fazer um código rápido você pode usar o terminal interativo, lá é possível fazer muita coisa, o problema é que você vai perder seu trabalho assim que fechá-lo. Caso queira algo mais completo, como um projeto, será necessário um editor de texto.

Se você (assim como eu) é um amante do Visual Studio, com certeza sentirá falta de uma IDE tão robusta. O Elixir não possui uma ferramenta oficial com esse propósito, mas tem plugins para os principais editores de textos. Atualmente eu uso o ElixirLS para o VS Code. Então imagino que terá um pouco de dificuldades no inicio, mas nada que não seja superável.

Imutabilidade

No Elixir, as variáveis não mudam de valor, logo não é possível fazer loop.

Ou seja, isso é impossível: i = i + 1

Um pouco assustador, não é? Eu achei. Mas a verdade é que essa afirmação não é 100% verdadeira. O fato é que as variáveis não mudam de valor, mas nós podemos reutilizar seu nome quantas vezes acharmos necessário.

Com isso, é SIM possível o i = i + 1, já que é um novo i , em um novo lugar na memória.

Mesmo que não fosse possível alterar o valor da variável, é possível fazer loop através da recursão, o Elixir possui recursos para que isso não seja custoso e é assim que é feito na maioria das vezes.

Elixir não tem herança

Elixir não possui um daqueles negocio que amamos: herança.

Você já ouviu falar que Elixir é muito produtivo, certo? Mas você já pensou na quantidade de código duplicado que uma herançazinha e uma interfacezinha não economizam as vezes? Eu já estava me imaginando escrevendo várias controllers iguais que fazem apenas CRUD, com toneladas de código duplicados.

Demorei um pouco pra chegar na parte de metaprogramação da documentação, e até nesse dia, nada me convencia que era possível ser produtivo usando Elixir.

Metaprogramação é o processo de utilização de código para escrever código

Outro recurso que o Elixir provê, e esse já estamos mais habituados é o polimorfismo, que é possível através dos protocols.

Agora não só estou convencido de que é possível ser muito produtivo, como estou convencendo outras pessoas.

Ecossistema

  • Enquanto o principal framework para aplicações Web do C# é o Asp.Net Core, o principal do Elixir é o Phoenix Framework, que a feature mais relevante são os websockets.
  • No C#, a ferramenta de persistência de dados mais famosa e mais utilizada é o Entity Framework, enquanto que para o Elixir existe o Ecto, este que possui uma sintaxe própria, graças aos mecanismos de Domain-specific languages(DSL) do Elixir. Essa DSL é muito parecida com as consultas LINQ do C#.
  • O principal gerenciador de pacotes da plataforma .Net é o NuGet, já para o ecossistema Erlang é o Hex.
  • No .Net, agrupamos vários projetos em uma Solution, enquanto no Elixir colocamos esses projetos em um Umbrella.

Próximos Capítulos

Eu pretendia fazer um único post explicando todas as diferenças e fazendo comparações sobre assuntos comuns como sintaxe, Ecto e Entity, Phoenix e Asp.Net. Percebi que tem bastante conteúdo para ser compartilhado, por isso estarei fazendo uma série, que de inicio terão 4 episódios, este e mais 3:

  • O básico das sintaxes de C# e Elixir.
  • Semelhanças entre Ecto e Entity Framework.
  • Organização de um projeto Phoenix e um projeto Asp.Net.

Nos vemos nos próximos capítulos.

--

--