Ruby

【Ruby入門】ハッシュに使われている「:(コロン)」シンボルとは?

※当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

 

ひでまる
ひでまる
ひでまるです!今回はハッシュに使われているシンボルについて解説していきます

 

ハッシュに使われている「:(コロン)」シンボルとは?

シンボルとは

  • 見た目は文字
  • 中身は整数

のオブジェクトです!
と言っても「どゆこと??」ですよね…詳しく解説していきます!

実際に「文字で作るハッシュ」と「シンボルで作るハッシュ」を見てみましょう!
ハッシュ?という方は、この記事を先に見てみてください

#文字でハッシュを作る
{"name"=>"田中", "age"=>25, "gender"=>"男"}

#シンボルでハッシュを作る
{name: "田中", age: 25, gender: "男"}

 

"name"使ったハッシュ、name:(シンボル)を使ったハッシュを作りました!

"name" と name:を比べて見るとどうでしょうか?
どちらも人間から見ると文字に見えますよね?

この様に、シンボルは表面的には文字列と同じ様に見えます!

そして、内部では整数として扱われます。

rubyのリファレンス(シンボル)を見ると
「シンボルは、ソース上では文字列のように見え内部では整数として扱われる、両者を仲立ちするような存在です」
と書かれています!

つまり

  • 内部は数字なので、PCは処理しやすい
  • 表面上は文字なので、人間は理解しやすい

人間にもPCにも優しい、それがシンボルです!

なぜシンボルが使われるのか?

シンボルを使うメリットは

  • 表面上は文字列のように見えるので、人間が扱いやすい
  • 内部は整数なので、PCにとって優しく高速で処理できる
  • シンボルは同じオブジェクトになるため、メモリ消費が少ない

この様なメリットがあります
上2つは上記で話した通りですが、「シンボルは同じオブジェクトになるため、メモリ消費が少ない」
とはどういう事なのでしょうか?

シンボルは同じオブジェクトになるため、メモリ消費が少ない

シンボルは1度作ると、メモリ上で同じところを使い続けます
どういう事か?

:nameというシンボルを3つ作って見ましょう!

#シンボル
puts :name.object_id
puts :name.object_id
puts :name.object_id

結果
88028
88028
88028

 

この様に3つの:nameを作り、object_idを調べてみます
すると88028というid番号が3つ同じなのが確認できると思います!

3つとも同じid番号という事は、全く同じオブジェクトという事です

シンボル説明

同じオブジェクトになるため、メモリ上で同じところを使い続ける事ができます。

では"name"という文字列を3つ作って見てみましょう!

#文字列
puts "name".object_id
puts "name".object_id
puts "name".object_id

結果
14830080
14829940
14829880

 

14830080、14829940、14829880すべて違う番号ですよね
違う番号ということは、メモリでは違う領域が使われているという事になります

 

シンボル、文字列解説

  • シンボルは1度作ると、メモリ上で同じところを使い続ける
  • 文字列はそれぞれメモリ領域を確保する

この事から、「シンボルはメモリ消費が少ない」となります

まとめ

シンボルとは「見た目は文字」「内部は数値」のオブジェクト

シンボルを使うメリットとして

  • 表面上は文字列のように見えるので、人間が扱いやすい
  • 内部は整数なので、PCにとって優しく高速で処理できる
  • シンボルは同じオブジェクトになるため、メモリ消費が少ない

-Ruby
-,