28
loading...
This website collects cookies to deliver better user experience
:
nos códigos, literalmente em todos os cantos. Mais difícil ainda foi entender as explicações nos primeiros resultados da busca "difference between string and symbols". Segui um bom tempo desenvolvendo código em Ruby sem ter entendido completamente a diferença entre essas duas classes, até que uma vez me deparei com um bug que foi causado por uma má decisão entre símbolo e string!titulo = 'O senhor dos anéis'
E o segundo caso: como assim representar um valor?
has_one :book
hash = { name: "Vinicius" }
hash[:name]
=> "Vinicius"
Certo, mas por que símbolos são otimizados pra esse papel de "Representar um valor"?
:name
duas vezes no mesmo código, vai ser sempre o mesmo :name
.a = :teste
b = a
c = :teste
a
, b
e c
se referem ao mesmo objeto. Além disso, a velocidade de comparação entre símbolos é extremamente rápida!a == c # true
a === c # true
a.eql?(c) # true
a.equal?(c) # true
upcase!
ou capitalize!
não alteram o modificam. Benefício? Você tem a garantia que não terá uma parte do seu software modificando um símbolo por acidente (o que gera bugs difíceis de serem encontrados!).upcase
, split
, ou outros, e o principal motivo é o de guardar um dado, seja um nome, data, etc, utilize uma string! public_methods
em uma versão pré-1.9 do Ruby e veja que até programadores experientes ainda se confundem as vezes em qual escolher. Como esse método retorna todos os métodos (públicos) de um objeto, você há de concordar que o correto seria public_methods
retornar uma array de símbolos, certo? Pois é, e nessas versões, se você fizesse:x = Object.new
puts x.public_methods
["inspect",
"pretty_print_cycle",
"pretty_print_inspect",
"clone",
...
]