O Hash Rocket está obsoleto?

99

O bem citado post de RIP Hash rocket parece implicar que a sintaxe Hash Rocket ( :foo => "bar") está obsoleta em favor do hash do estilo JSON Ruby ( foo: "bar"), mas não consigo encontrar nenhuma referência definitiva declarando a forma Hash Rocket está obsoleto / desaconselhado a partir do Ruby 1.9.

mahemoff
fonte
Acho que aquele cara só usa Ruby com Rails.
Niklas B.
Viva o foguete
HashRocketSyntax
O foguete ainda está forte 🚀
mahemoff

Respostas:

132

O autor daquela postagem do blog está sendo excessivamente dramático e tolo, isso ainda=> é bastante necessário . Em particular:

  1. Você deve usar o foguete para símbolos que exigem cotação: :'where.is' => xé válido, mas 'where.is': xnão é. Ruby 2.2 corrigiu esse problema, então você pode dizer 'where.is': xem Ruby 2.2+.
  2. Você deve usar o foguete para símbolos que não são rótulos válidos: :$set => xé válido, mas $set: xnão é. No Ruby 2.2+ você pode contornar este problema com aspas: '$set': xfará a coisa certa.
  3. Você deve usar o foguete se usar chaves em seus Hashes que não sejam símbolos: 's' => xé válido, mas 's': xé algo completamente diferente.

Você pode confundir o acima da maneira óbvia, é claro:

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

mas isso é simplesmente feio e desnecessário.

O foguete não vai a lugar nenhum sem prejudicar os Hashes de Ruby.

mu é muito curto
fonte
6
s / excessivamente dramático e tolo / dramático e defensor com uma homenagem eloquente /. O resto de seus pontos permanecem.
dbenhur
15
Você deve se perguntar se o uso da nova sintaxe, quando ainda precisa contar com a sintaxe antiga para determinados cenários, simplesmente complicará nosso código.
Dave Rapin
4
@DaveRapin: É por isso que não me preocupo com a sintaxe não-foguete. Eu faço uma boa parte do trabalho do MongoDB e geralmente uso não-símbolos como chaves Hash (não importa tudo o que h[:s]eu faço), então a sintaxe do estilo JavaScript é apenas uma complicação inútil para mim. Para mim, parece uma ideia malfeita, e agora estamos presos a ela e à confusão relacionada para sempre.
mu é muito curto
8
@DaveRapin Considere a = [0,1,4,9]vs a = Array.new(4){ |i| i**2 }.. Por que usar o primeiro quando às vezes você precisa usar o último? Resposta: porque é mais conveniente. TIMTOWTDI complica a linguagem, mas isso é uma troca. Lua é realmente elegante no núcleo e, portanto, fácil de aprender, mas irritante para codificar. Ruby tem muitos casos especiais e recursos personalizados que tornam mais difícil aprender, mas é uma alegria programar. Eu, por exemplo, bem-vindo a notação Hash-with-symbol-keys mais simples de digitar e mais fácil de ler para o caso comum.
Phrogz
7
Embora seja menos divertido de digitar, eu definitivamente prefiro o foguete de hash. Por quê? porque isso significa que sempre que eu usar um símbolo para uma chave, posso pesquisá-lo em qualquer lugar em meu projeto, pesquisando uma string que comece com dois-pontos. Para mim, a falta de consistência entre os caracteres reais usados ​​para denotar a chave em my_hash = {a:1}e myhash[:a] = 1é, pelo menos, bastante irritante. Tenho certeza de que não sou o único que se sente assim.
Huliax