Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@it31415

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

More than 1 year has passed since last update.

どうも、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でシェアしてもらえるとうれしいです!

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
it31415
ベンチャーで働くRailsエンジニア。Pythonを使ったAIの記事を書いて、第2回#Aidemynoteオーディエンス大賞受賞。中退→フリーター→無職からProgate・Aidemyで勉強して、自社開発ベンチャーのRailsエンジニアに転職。マイクロサービスを使ったWebサービスをゼロから作る現場で学んだことを投稿します。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?