Ruby
Rails

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

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」はシンボルを使ってない。
紛らわしくて混乱します。。
実は、シンボルは「-」が使えません。なので、シンボルを使えないのでこうなってます。