Help us understand the problem. What is going on with this article?

Rubyのシンボルについてのメモ

More than 1 year has passed since last update.

最近Rubyについてきちんと勉強しようと思ってたのしいRubyを読んでたらシンボルが何かよくわからなかったのでメモ。

シンボルって?

調べたところ、シンボルとは

  • ソース上では文字列として
  • 内部では数値として扱われる
  • シンボルと文字列は一対一に対応
  • メソッド名やクラス名、変数名などはシンボルになる

大事な性質はこんな感じ

いろいろやってみる

シンボルの表示

作ったシンボルを表示してみる。

まず変数symにシンボル:fooを入れる。
で、pメソッドとputsメソッドで表示してみる。

sym = :foo
p sym           #=> :foo
puts sym        #=> "foo"

うーん、普通に表示すると文字列として表示されるのか。
pメソッドで表示するとシンボルとして表示される。
つまりソース上では文字列として振る舞うけど、実際はシンボルだよーということがわかる。説明が難しい…。

ついでに楽しいRubyにも載っていたto_sto_symメソッドも試してみた。

p sym.to_s      #=> "foo"
p "foo".to_sym  #=> :foo

なるほど。これはメソッドの説明通りそれぞれ文字列とシンボルオブジェクトに変わっている。
それにしてもto_sはまだ使いそうだけどto_symって使うことあるのだろうか…(使用する例とかあったら是非教えてください!)

シンボルと文字列の違い

結局、これ、わざわざシンボル使わなくても文字列で良くない?って思っちゃうのでちょっと比較。

同じシンボルと文字列を作成してそれぞれのオブジェクトIDを比べてみる。

sym1 = :foo
sym2 = :foo
p sym1.object_id  #=> 496340
p sym2.object_id  #=> 496340

str1 = "foo"
str2 = "foo"
p str1.object_id  #=> 32323284
p str2.object_id  #=> 32323272

なるほど!シンボルでは結局同じ数値に変換されるから同じ名前のシンボルは同じ値、文字列は同じであっても違うオブジェクトとして認識されている。

要するにシンボルとは文字列の皮を被った数値なんですね!(言いたかっただけ)

終わりに

いろいろ自分で書いて実行してみてシンボルについての理解は深まったかな?と思う。
今後はしっかり文字列とシンボルをいい感じで使い分けていきたいなあ。

参考にさせて頂いたサイト

Rubyの文字列とシンボルの違いをキッチリ説明できる人になりたい
Rubyのシンボルは文字列の皮を被った整数だ!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした