Czy Hash Rocket jest przestarzały?

99

Dobrze cytowany post dotyczący rakiety RIP Hash wydaje się sugerować, że składnia Hash Rocket ( :foo => "bar") jest przestarzała na rzecz nowego skrótu w stylu JSON w Ruby ( foo: "bar"), ale nie mogę znaleźć żadnego ostatecznego odniesienia określającego formę Hash Rocket jest faktycznie przestarzałe / niezalecane od wersji 1.9 Rubiego.

mahemoff
źródło
Myślę, że ten gość używa Rubiego tylko z Railsami.
Niklas B.
Niech żyje rakieta
HashRocketSyntax
Rakieta wciąż się rozwija 🚀
mahemoff

Odpowiedzi:

132

Autorka tego blogu jest bycie przesadnie dramatyczny i głupi, =>jest nadal dość konieczne . W szczególności:

  1. Musisz użyć rakiety dla symboli, które wymagają cytowania: :'where.is' => xjest ważny, ale 'where.is': xnie jest. Ruby 2.2 naprawił ten problem, więc możesz powiedzieć 'where.is': xw Rubim 2.2+.
  2. Musisz użyć rakiety do symboli, które nie są prawidłowymi etykietami: :$set => xjest ważna, ale $set: xnie jest. W Rubim 2.2+ możesz ominąć ten problem za pomocą cudzysłowów: '$set': xzrobi właściwą rzecz.
  3. Musisz użyć rakiety, jeśli używasz kluczy w swoich hashach, które nie są symbolami: 's' => xjest ważna, ale 's': xjest czymś zupełnie innym.

Oczywiście możesz omijać powyższe w oczywisty sposób:

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

ale to po prostu brzydkie i niepotrzebne.

Rakieta nigdzie nie leci bez okaleczenia Hashes Ruby.

mu jest za krótkie
źródło
6
s / przesadnie dramatyczne i głupie / dramatyczne i orędujące z wymownym hołdem /. Pozostałe punkty pozostają.
dbenhur
15
Musisz się zastanawiać, czy użycie nowej składni, gdy nadal musisz polegać na starej składni w niektórych scenariuszach, po prostu skomplikuje nasz kod.
Dave Rapin
4
@DaveRapin: Dlatego nie zawracam sobie głowy składnią inną niż rakietowa. Wykonuję sporo pracy z MongoDB i często używam nie-symboli jako kluczy Hash (nieważne, h[:s]co robię), więc składnia w stylu JavaScript jest dla mnie po prostu bezcelową komplikacją. Wydaje mi się, że to słabo przemyślany pomysł, ale teraz utknęliśmy z tym i związanym z tym zamieszaniem na zawsze.
mu jest za krótkie
8
@DaveRapin Rozważmy a = [0,1,4,9]Vs. a = Array.new(4){ |i| i**2 }. Po co używać pierwszego, skoro czasami trzeba używać drugiego? Odpowiedź: ponieważ jest to wygodniejsze. TIMTOWTDI komplikuje język, ale jest to kompromis. Lua jest naprawdę elegancki w swej istocie i dlatego jest łatwy do nauczenia, ale irytujący w rzeczywistości kodowanie. Ruby ma wiele specjalnych przypadków i niestandardowych funkcji, które utrudniają naukę, ale przyjemność z programowania. Witam prostsza do wpisania, łatwiejsza do odczytania notacja Hash-with-Symbol-keys dla typowego przypadku.
Phrogz
7
Chociaż pisanie jest mniej przyjemne, zdecydowanie wolę rakietę z haszem. Czemu? ponieważ oznacza to, że za każdym razem, gdy używam symbolu dla klucza, mogę go wyszukać w dowolnym miejscu w moim projekcie, wyszukując ciąg zaczynający się od dwukropka. Dla mnie brak spójności między rzeczywistymi znaków używany do określenia kluczyk my_hash = {a:1}i myhash[:a] = 1to, co najmniej, raczej denerwujące. Jestem pewien, że nie tylko ja się tak czuję.
Huliax