2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-25

最近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のシンボルは文字列の皮を被った整数だ!

2
3
5

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?