Tal como o Ruby possui symbols, Elixir possui atoms e tal como em
Ruby é possível converter strings em symbols, no Elixir também é
possível através da função binary_to_atom/2 ou
binary_to_existing_atom/2 que recebe dois argumentos, a string e
o atom :utf8. Eu quis melhorar isto e submeti uma pull-request…
Atoms são strings cujo valor é o próprio conteúdo, ou seja, o atom
:aberto possui o conteúdo aberto. Isto não parece muito útil a
primeira vista, mas o que ocorre é que os atoms são referencias, de
modo que vocês pode ter milhares de processos utilizando o atom
:aberto sem ocupar todo o espaço que ocupariam se fossem
strings. Vejam que se tivermos milhares de processos utilizando a
string “aberto”, cada processo estaria alocando vários bytes.
As funções binary_to_atom/2 e binary_to_existing_atom/2 são
responsáveis por converter uma string em um atom, e no caso eu queria
digitar menos. Considerei que o :utf8 que sempre era passado era
desnecessário e então enviei uma pull-request que adiciona duas macros
que aceitam apenas um parâmetro.
Alguns exemplos de como era chamado antes:
binary_to_atom "my_atom", :utf8 #=> :my_atom
:my_atom #=> :my_atom
binary_to_existing_atom "my_atom", :utf8 #=> :my_atom
E depois que o merge foi feito:
binary_to_atom "my_atom" #=> :my_atom
:my_atom #=> :my_atom
binary_to_existing_atom "my_atom" #=> :my_atom
Aprender uma nova linguagem de programação, e ainda por cima poder contribuir para sua evolução, mesmo que esteja ainda tão instável em termos de maturidade, mas isso faz parte. Entender as fraquezas e as partes fortes faz parte, estudar seu código, participar das discussões acompanhar a evolução de uma linguagem tão promissora é, no mínimo, divertido.