Simbolos en Ruby

Es una cadena inmutable en tiempo de ejecución.

Cuando se crean dos cadenas, aunque tengan exactamente lo mismo, se crean dos objectos.

En cambio, si se crean dos símbolos, si ese símbolo ya existía con anterioridad, ruby no lo vuelve a crear y recicla el símbolo anterior.

cadena1 = "ruben"
cadena2 = "ruben"

simbolo1 = :ruben
simbolo2 = :ruben

puts cadena1.object_id    #47319548737540
puts cadena2.object_id    #47319548737500

puts simbolo1.object_id   #1029788
puts simbolo2.object_id   #1029788

 

A la hora de comparar dos cadenas, ruby debera comparar letra por letra a ver si son iguales.

En cambio con dos simbolos, ruby compara los object_id

¿Cuando se deben utilizar símbolos?

  • Cuando no se necesita modificar el string
  • Cuando no necesito los métodos del string
  • Los simbolos suelen ser utiles para nombres de cosas