São poucas linguagens que possuem símbolos assim como o Ruby. Mas ai vem pergunta: o que são símbolos? Eles são uma forma de representar uma string de modo mais leve, para ser mais especifico são os textos iniciados com ":". Lembrando que, partindo do principio que tudo em Ruby é objeto, isso é muito útil!
Veja alguns exemplos de utilização de símbolos:
redirect_to :action => :index |
<% form_tag :action => :enviar_eventos do %> |
usuario.update_attribute( :tel , "2222-2222" ) |
Veja isso:
a = : "www.casaopen.com.br" |
: 'www.casaopen.com.br' .object_id |
Isso que dizer que os símbolos são de, certa forma, imutáveis ou seja eles permanecem no ciclo de vida do seu projeto.
Símbolos são representações de sequências, veja:
Em vista disso, qual é a importância dos símbolos?
Eles são uma ótima forma de representar sequências que não necessitam de alterações em tempo de execução e também não necessitam de todos os métodos da classe String! Dúvida? Execute o seguinte código e veja o resultado.
Para maiores informações veja esse
post que explica todas as formas possíveis de simbolos.
Æ!!
ResponderExcluirMuito vago seu post cara :(
O symbol tem várias vantagens, como por exemplo:
for i in 0..20
puts "bla".object_id
end
for i in 0..20
puts :bla.object_id
end
No segundo caso ele vai criar apenas um objeto na memória, diferentemente da string que ele cria um objeto a cada passagem no loop.
Tem algumas precauções a usar simbols tambem, afinal, eles ficam mais tempo na memória, mas há bastante discussão sobre isso, de uma procurada depois por que vale a pena! :)
Há braços
Um outro ponto muito importante sobre os simbolos em ruby que vc esqueceu de comentar é o uso deles na metaprogramação. Por exemplo
ResponderExcluir"10".send :to_i
Sem simbolos isso nunca seria possivel. Claro que, vc pode fazer
"10".send "to_i"
porém isso só é permitido pq o ruby está dando o cast pra vc.
E os introspections como
10.respond_to? :to_s
também só occorem com uso de simbolos. Claro que, da mesma forma que para reflection, com introspections vc também pode usar uma string, porém, novamente, só pq o ruby da o cast por vc.
Inté mais!