¿Hash Rocket está obsoleto?

99

La publicación bien citada de RIP Hash rocket parecería implicar que la sintaxis de Hash Rocket ( :foo => "bar") está en desuso a favor del hash ( foo: "bar") de estilo JSON nuevo en Ruby , pero no puedo encontrar ninguna referencia definitiva que indique el formulario Hash Rocket en realidad está desaprobado / desaconsejado a partir de Ruby 1.9.

mahemoff
fuente
Creo que ese tipo solo usa Ruby con Rails.
Niklas B.
Larga vida al cohete
HashRocketSyntax
Rocket sigue siendo fuerte 🚀
mahemoff

Respuestas:

132

El autor de esa publicación de blog está siendo demasiado dramático y tonto, todavía=> es bastante necesario . En particular:

  1. Debe usar el cohete para los símbolos que requieren citar: :'where.is' => xes válido pero 'where.is': xno lo es. Ruby 2.2 ha solucionado este problema, por lo que puede decirlo 'where.is': xen Ruby 2.2+.
  2. Debes usar el cohete para los símbolos que no son etiquetas válidas: :$set => xes válido pero $set: xno lo es. En Ruby 2.2+ puede solucionar este problema con comillas: '$set': xhará lo correcto.
  3. Debes usar el cohete si usas claves en tus Hashes que no son símbolos: 's' => xes válido pero 's': xes algo completamente diferente.

Puede eludir lo anterior de la manera obvia, por supuesto:

h = { }
h[:'where.is'] = 'pancakes house?'
# etc.

pero eso es feo e innecesario.

El cohete no irá a ninguna parte sin paralizar los Hashes de Ruby.

mu es demasiado corto
fuente
6
s / demasiado dramático y tonto / dramático y de defensa con un elocuente homenaje /. El resto de sus puntos se mantienen.
dbenhur
15
Debe preguntarse si usar la nueva sintaxis, cuando todavía necesita confiar en la sintaxis anterior para ciertos escenarios, simplemente complicará nuestro código.
Dave Rapin
4
@DaveRapin: Por eso no me preocupo por la sintaxis que no es de cohetes. Hago bastante trabajo en MongoDB y, a menudo, uso no símbolos como claves Hash (no importa todo lo h[:s]que hago), por lo que la sintaxis de estilo JavaScript es una complicación inútil para mí. Me parece una idea mal pensada y ahora estamos atrapados con ella y la confusión relacionada para siempre.
mu es demasiado corto
8
Considere @DaveRapin a = [0,1,4,9]vs a = Array.new(4){ |i| i**2 }. ¿Por qué usar el primero cuando a veces necesita usar el segundo? Respuesta: porque es más conveniente. TIMTOWTDI complica el lenguaje, pero esto es una compensación. Lua es realmente elegante en el núcleo y, por lo tanto, fácil de aprender, pero molesto de codificar. Ruby tiene muchos casos especiales y características personalizadas que hacen que sea más difícil de aprender, pero es un placer programarlo. Yo, por mi parte, bienvenido la notación Hash-with-symbol-keys más simple de escribir y más fácil de leer para el caso común.
Phrogz
7
Aunque es menos divertido de escribir, definitivamente prefiero el cohete hash. ¿Por qué? porque significa que cada vez que uso un símbolo para una clave puedo buscarlo en cualquier lugar de mi proyecto buscando una cadena que comience con dos puntos. Para mí, la falta de coherencia entre los caracteres reales que se utilizan para indicar la clave my_hash = {a:1}y myhash[:a] = 1es, al menos, bastante molesta. Estoy seguro de que no soy el único que se siente así.
Huliax