Help us understand the problem. What is going on with this article?

Rubyでのハッシュの2種類の書き方

どうも、ITのんびりです
以下の記事で指摘を受けたので、ハッシュの書き方の違いを調べてまとめました
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でシェアしてもらえるとうれしいです!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away