Edited at

配列とハッシュとシンボルは紛らわしいので整理!!

More than 1 year has passed since last update.

どうも千葉です。GWはいかがお過ごしですか。

実家に帰ったりしてると、以外に忙しくて時間なかったりしますよね。。。

今日は、railsやってて紛らわしい配列とハッシュについてです。

整理!!


配列

まずは、配列です。

    a = ["a", "b", "c"]

puts a[0] #aを表示
puts a[1] #bを表示
puts a[2] #cを表示


ハッシュ

配列と違って、a[0]をa["first"]のようにkeyを使って扱えます。

[]の中は文字列を指定

    a = {} #aをハッシュとして定義

a["first"] = 1
pusts a["first"] #1と表示

または、以下のようにも書けます。

    a = { "first" => 1, "second" => 2 }

puts a["first"] #1と表示
puts a["second"] #2と表示


ハッシュとシンボル

シンボルとは、文字列みたいなものと思って大丈夫です。

ハッシュと組み合わせることが多いです。

    h1 = { :first => 1, :second => 2 }

puts h1[:first] #1と表示
puts h1[:second] #2と表示

ここから、紛らわしくなってきます。

別の書き方もできます。

    h2 = { first: 1, second: 2}

puts h2[:first] #1と表示
puts h2[:second] #2と表示

h1 == h2 #trueになる

書き方が簡素化できます。(紛らわしいポイント)

h1とh2の結果は同じになります。

h1をh2で書ける。「=>」使わなくてよいので楽チンです。

:が色んな位置に出て来ますね。。。あくまでシンボルは「:」が文字列の前にきます。


:first、:secondはシンボルなので文字列の前に「:」


代入する時は、簡素化のためシンボルが文字列の後ろ「:」


さらに紛らわしい、混在パターン

    stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true

stylesheet_link_tagは関数です。

引数として、色々持ってますが実は引数は2つ。この例で、分解して行きます。


関数は()を省略できる

()を追加してみます

    stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true

stylesheet_link_tag ("application", media: "all", "data-turbolinks-track" => true)

そして、「:media」はハッシュのようだが{}がない。

なんと、引数の最後がハッシュの場合、{}を省略できます。

省略しないとこうなります。

    stylesheet_link_tag ("application", media: "all", "data-turbolinks-track" => true)

stylesheet_link_tag ("application", { media: "all", "data-turbolinks-track" => true} )

そしてなぜか、「data-turbolinks-track」はシンボルを使ってない。

紛らわしくて混乱します。。

実は、シンボルは「-」が使えません。なので、シンボルを使えないのでこうなってます。