Desculpe, seu navegador não suporta JavaScript! Casa Open: Símbolos em Ruby

Símbolos em Ruby

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"
a.object_id #=> 166478
:'www.casaopen.com.br'.object_id # => 166478

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:
a = :"Ruby On Rails" #=> :"Ruby On Rails" 
a.class #=> Symbol
puts a #=> Ruby On Rails #=> nil
# 'puts a' imprime a sequência de a que é semelhante ao puts em uma String... 
b = "Ruby On Rails" #=> "Ruby On Rails"
b.class #=> String
puts b #=> Ruby On Rails #=> nil


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.

a = :"Ruby on Rails"
b = "Ruby on Rails"
a.methods.size
b.methods.size

Para maiores informações veja esse post que explica todas as formas possíveis de simbolos.

2 comentários:

  1. Æ!!

    Muito 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

    ResponderExcluir
  2. Um outro ponto muito importante sobre os simbolos em ruby que vc esqueceu de comentar é o uso deles na metaprogramação. Por exemplo

    "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!

    ResponderExcluir

Casa Open | by Samuel Vinícius, Belo Horizonte - MG. Powered by Blogger