Hash Rocket est-il obsolète?

99

Le post de fusée RIP Hash bien cité semble impliquer que la syntaxe Hash Rocket ( :foo => "bar") est déconseillée au profit du hachage de style JSON nouveau à Ruby ( foo: "bar"), mais je ne trouve aucune référence définitive indiquant la forme Hash Rocket est en fait obsolète / déconseillée à partir de Ruby 1.9.

Mahemoff
la source
Je pense que ce type n'utilise que Ruby with Rails.
Niklas B.
Vive la fusée
HashRocketSyntax
Rocket va toujours fort 🚀
mahemoff

Réponses:

132

L'auteur de ce billet de blog est trop dramatique et stupide, il =>est encore tout à fait nécessaire . En particulier:

  1. Vous devez utiliser la fusée pour les symboles qui nécessitent des guillemets: :'where.is' => xest valide mais 'where.is': xne l'est pas. Ruby 2.2 a résolu ce problème, vous pouvez donc le dire 'where.is': xdans Ruby 2.2+.
  2. Vous devez utiliser la fusée pour les symboles qui ne sont pas des étiquettes valides: :$set => xest valide mais $set: xne l'est pas. Dans Ruby 2.2+, vous pouvez contourner ce problème avec des guillemets: '$set': xfera la bonne chose.
  3. Vous devez utiliser la fusée si vous utilisez des clés dans vos hachages qui ne sont pas des symboles: 's' => xc'est valide mais 's': xc'est quelque chose de complètement différent.

Vous pouvez bien sûr parcourir ce qui précède de la manière évidente:

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

mais c'est juste moche et inutile.

La fusée ne va nulle part sans paralyser Ruby's Hashes.

mu est trop court
la source
6
s / trop dramatique et insensé / dramatique et prônant avec un hommage éloquent /. Le reste de vos points tient.
dbenhur
15
Vous devez vous demander si l'utilisation de la nouvelle syntaxe, alors que vous devez encore vous fier à l'ancienne syntaxe pour certains scénarios, compliquera simplement notre code.
Dave Rapin
4
@DaveRapin: C'est pourquoi je ne me soucie pas de la syntaxe non-fusée. Je fais pas mal de travail avec MongoDB et j'utilise souvent des non-symboles comme clés de hachage (sans parler de tout ce que h[:s]je fais), donc la syntaxe de style JavaScript est juste une complication inutile pour moi. Cela me semble être une idée de gee-whiz mal pensée et maintenant nous sommes coincés avec elle et la confusion qui y est associée pour toujours.
mu est trop court
8
@DaveRapin Considérez a = [0,1,4,9]vs a = Array.new(4){ |i| i**2 }.. Pourquoi utiliser le premier alors que vous avez parfois besoin d'utiliser le second? Réponse: parce que c'est plus pratique. TIMTOWTDI complique le langage, mais c'est un compromis. Lua est vraiment élégant au cœur et donc facile à apprendre, mais ennuyeux à coder. Ruby a beaucoup de cas spéciaux et de fonctionnalités personnalisées qui le rendent plus difficile à apprendre, mais c'est un plaisir de programmer. Je, pour ma part, bienvenue la notation Hash-with-symbol-keys plus simple à taper, plus facile à lire pour le cas courant.
Phrogz
7
Bien que moins amusant à taper, je préfère définitivement la fusée de hachage. Pourquoi? car cela signifie que chaque fois que j'utilise un symbole pour une clé, je peux le rechercher n'importe où dans mon projet en recherchant une chaîne commençant par deux points. Pour moi, le manque de cohérence entre les caractères réels utilisés pour désigner la clé d'entrée my_hash = {a:1}et myhash[:a] = 1est, au moins, plutôt ennuyeux. Je suis sûr que je ne suis pas le seul à ressentir cela.
Huliax