Ruby e os símbolos
Meu primeiro contato com Ruby on Rails, foi em 2008 e confesso que estranhei muito toda a “feitiçaria” do Rails. Para quem está acostumado com Java o mundo de Convention over Configuration soa no mínimo estranho em um primeiro momento. Felizmente depois de algum tempo me familiarizei com a linguagem, com o framework e não quero outra vida
Como todos, comecei com o scaffold e analisando o código gerado o que me soou mais estranho foi essa sintaxe:
:alguma_coisa_estranha
Que isso ? dois pontos antes ? que porra é essa ??
Se você também teve essa reação, vamos a explicação
:alguma_coisa_estranha é nada mais nada menos do que um Symbol em Ruby
Tá, blz isso é um Symbol, mas p que usar isso e essa sintaxe esotérica ? vamos lá
:alguma_coisa_estranha é a mesma coisa que “alguma_coisa_estranha”
ambos criam uma nova string alocando um espaço de memória reservado, e é aí que vem o pulo do gato, quando você usa a mesma string diversas vezes em seu código, da forma trivial
“alguma_coisa_estranha”
a cada vez que seu programinha ruby lê essa string ele faz o seguinte: String.new(“alguma_coisa_estranha”)
agora se você cria um símbolo
:alguma_coisa_estranha
e esse símbolo aparece várias vezes em seu programinha ruby ele não vai dar um Symbol.new(“alguma_coisa_estranha”) sempre, isso será feito apenas uma vez, é alocado um espaço de memória e a cada nova chamada ao invés do Symbol.new(“alguma_coisa_estranha”) o interpretador vai ler do mesmo endereço de memória criado no primeiro new do Symbol, economizando esforço do interpretador.
Sacou ? pronto era só isso agora nem ficou tão esquisito
Abraços!
