Apakah Hash Rocket sudah ditinggalkan?

99

Pos roket RIP Hash yang dikutip dengan baik tampaknya menyiratkan sintaks Hash Rocket ( :foo => "bar") tidak digunakan lagi untuk mendukung hash gaya JSON baru ke Ruby ( foo: "bar"), tetapi saya tidak dapat menemukan referensi pasti yang menyatakan bentuk Roket Hash. sebenarnya sudah usang / tidak disarankan pada Ruby 1.9.

mahemoff
sumber
Saya pikir orang itu hanya menggunakan Ruby dengan Rails.
Niklas B.
Hidup roket
HashRocketSyntax
Roket masih kuat 🚀
mahemoff

Jawaban:

132

Penulis posting blog itu terlalu dramatis dan bodoh, =>itu masih sangat diperlukan . Khususnya:

  1. Anda harus menggunakan roket untuk simbol yang membutuhkan kutipan: :'where.is' => xvalid tetapi 'where.is': xtidak. Ruby 2.2 telah memperbaiki masalah ini sehingga Anda dapat mengatakannya 'where.is': xdi Ruby 2.2+.
  2. Anda harus menggunakan roket untuk simbol yang bukan label yang valid: :$set => xvalid tetapi $set: xtidak. Di Ruby 2.2+ Anda dapat mengatasi masalah ini dengan kutipan: '$set': xwill do The Right Thing.
  3. Anda harus menggunakan roket jika Anda menggunakan kunci di Hash Anda yang bukan simbol: 's' => xvalid tetapi 's': xbenar-benar berbeda.

Anda tentu saja dapat mengatasi hal-hal di atas dengan cara yang jelas:

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

tapi itu jelek dan tidak perlu.

Roket tidak akan kemana-mana tanpa melumpuhkan Ruby.

mu terlalu pendek
sumber
6
terlalu dramatis dan bodoh / dramatis serta mendukung dengan penghormatan yang fasih /. Sisa poin Anda berdiri.
dbenhur
15
Anda harus bertanya-tanya apakah menggunakan sintaks baru, ketika Anda masih perlu mengandalkan sintaks lama untuk skenario tertentu, hanya akan memperumit kode kita.
Dave Rapin
4
@DaveRapin: Itulah mengapa saya tidak peduli dengan sintaks non-roket. Saya melakukan sedikit pekerjaan MongoDB dan saya sering menggunakan non-simbol sebagai kunci Hash (apalagi yang h[:s]saya lakukan) sehingga sintaks gaya JavaScript hanyalah kerumitan yang tidak ada gunanya bagi saya. Sepertinya ide gee-jagoan yang dipikirkan dengan buruk bagi saya dan sekarang kita terjebak dengannya dan kebingungan terkait selamanya.
mu terlalu pendek
8
@DaveRapin Pertimbangkan a = [0,1,4,9]vs a = Array.new(4){ |i| i**2 }. Mengapa menggunakan yang pertama saat Anda terkadang perlu menggunakan yang terakhir? Jawaban: karena lebih nyaman. TIMTOWTDI memang memperumit bahasa, tetapi ini adalah kompromi. Lua benar-benar elegan pada intinya dan karenanya mudah dipelajari, tetapi menjengkelkan untuk benar-benar membuat kode. Ruby memiliki banyak kasus khusus dan fitur khusus yang membuatnya lebih sulit untuk dipelajari, tetapi menyenangkan untuk diprogram. Saya, untuk satu, selamat datang notasi Hash-dengan-simbol-kunci yang lebih sederhana untuk mengetik dan lebih mudah dibaca untuk kasus umum.
Phrogz
7
Meski kurang asyik untuk mengetik, saya pasti lebih suka roket hash. Mengapa? karena ini berarti bahwa setiap kali saya menggunakan simbol untuk kunci, saya dapat mencarinya di mana saja dalam proyek saya dengan mencari string yang dimulai dengan titik dua. Bagi saya, kurangnya konsistensi antara karakter sebenarnya yang digunakan untuk menunjukkan kunci dalam my_hash = {a:1}dan myhash[:a] = 1, setidaknya, agak mengganggu. Saya yakin saya bukan satu-satunya yang merasa seperti ini.
Huliax