LoginSignup
209
170

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-05-05

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

209
170
4

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
209
170