LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-04-01

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0