以下の記事で指摘を受けたので、ハッシュの書き方の違いを調べてまとめました
SchooのRuby入門のまとめ
ロケットハッシュ
Rubyの昔からのハッシュの書き方は
{ "key" => "value" }
=> {"key"=>"value"}
ロケットハッシュと言う
文字列と変数の違い
"key"みたいに文字列を使えばエラーは起きないが、keyみたいな変数だとこれより前で宣言していないといけない
{ key => "value"}
NameError (undefined local variable or method `key` for main:Object)
key = "key1"
{ key => "value"}
=> {"key"=>"value"}
シンボル
シンボルなら宣言しなくてもOK
{ :key => "value"}
=> {:key=>"value"}
キーは文字列ではなくシンボルを使う方が普通らしい
{ key: => "value"}
syntax error, unexpected '}', expecting end-of-input
{ key: => "value"}
^
こういう書き方はだめ
文字列とシンボルの違い
文字列とシンボルは違うものなので
{ "key" => "value" }
=> {"key"=>"value"}
と
{ :key => "value"}
=> {:key=>"value"}
は別のもの
ただ、Railsのライブラリでよくあるらしいが、どちらのタイプのハッシュを渡しても同じように扱ってくれることがあるらしい
それは渡した先のメソッドが違いを吸収してくれるらしい
シンボルの2種類の書き方
:fooと:"foo"は全く同じシンボル
:foo
=> :foo
:"foo"
=> :foo
""で囲めば数字で始まるシンボルとか,スペースを含むシンボルとか,空文字列に対応するシンボルを表せる
:"1st" # 数字で始まるシンボル
:"foo bar" # スペースを含むシンボル
:"" # 空文字列に対応するシンボル
Ruby1.9以降で追加されたシンボルを使ったハッシュの書き方
Railsではシンボルを使うのが普通なので、Ruby1.9からシンボルを使った新しい記法がサポートされた
{ key: "value"}
=> {:key=>"value"}
{ key: :value}
=> {:key=>:value}
{ :key => :value}
=> {:key=>:value}
バリューの方をシンボルにしても大丈夫みたい
あまりしない方が良さそうだけど、ロケットハッシュとシンボルで書く方法を混ぜても大丈夫みたい
{foo: 1, :bar => 2}
=> {:foo=>1, :bar=>2}
{:foo => 1, "bar": 2}
=> {:foo=>1, :bar=>2}
どちらも同じ出力になる
おわりに
最後まで読んでいただきありがとうございました。
QiitaやTwitterなどにコメントをしてもらったり、SNSでシェアしてもらえるとうれしいです!
Rubyでのハッシュの書き方の違いをまとめました
— ITのんびり@V字回復エンジニア (@it31415) 2019年4月1日
文字列とシンボルの違いがわかっていない人にもおすすめです!
Rubyでのハッシュの2種類の書き方 https://t.co/2slLcuaTOb #Qiita