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