magazine off

テクノロジー・マガジン OFFです!コラム ✖️ 最新ニュースをほぼ毎日お届けしています。

RubyのシンボルについてRubyエンジニアじゃない人でも分かるように簡潔に解説します。

 

 

Rubyのシンボルについて、なんとなく理解したいと思ったので学んでみました。

 

詳しくは、下記のQiitaがすごく分かりやすかったので、譲ります。

 

 

この記事では、上記のQiitaよりもざっくり、簡単に、早く、Rubyのシンボルとはなんぞや?

 

Rubyのシンボルを使う意味とは?というところを解説していきます。

 

忙しい人や、非エンジニアの人におすすめです。

 

Rubyのシンボルのシンタックス

 

まず前提として、シンボルのシンタックスはこんな感じです。

 

 

(:)  👈を使って書くんですね。

 

シンボルのルールとしては、

 

シンボルの特徴

  • シンボルは小さな小さなオブジェクト
  • シンボルは値を持たない。プレースホルダーであり、変数ではない。
  • 特定の名前を持つシンボルは1つしか存在せず、これはRubyによって管理される
  • シンボルは、大量に作成するとメモリリークを起こす可能性があります。

 

という感じ。ここに関してはわからなくても大丈夫、さらっと流してもらえれば。

 

シンボルの書き方、使い所


Rubyのシンボルを、簡単に説明するとき、上記のようなコードの書き方になる。

 

ハッシュを作るとき、文字列ではなくシンボルを使う。結果は同じ、やってることも同じ。

 

ただし、Ruby内部実装が、違う。この点については、Qiirtaを引用します。

Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前’を整数で管理しています。これは名前を直接文字列として処理するよりも 速度面で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボルです。

シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、両者を仲立ちするような存在です。

名前を管理するという役割上、シンボルと文字列は一対一に対応します。 また、文字列と違い、immutable (変更不可)であり、同値ならば必ず同一です。

 

つまり、rubyのシンボルは、文字列の皮を被った数値ということだ。

 

シンボルはユニークでimmutable (変更不可)なのが特徴

 

str1 = "hoge"
str2 = "hoge"
p str1.equal?(str2) #=> false
p str1.object_id    #=> 70332245439420
p str2.object_id    #=> 70332245439400

sym1 = :hoge
sym2 = :hoge
p sym1.equal?(sym2) #=> true
p sym1.object_id    #=> 901148
p sym2.object_id    #=> 901148

 

これもそうだね。

 

シンボルを使うとrubyは早くなる

 

以上のような結果、文字列と数値を比較しているわけだから、文字列よりも、数値の方が早くなる。

 

つまり、rubyはシンボルを使うと早くなる。そういう認識でOkです。

 

シンボルを使うとき、使わないとき

 

これに関しては、Qiitaの記事に丸投げ。

 

 

*参考にした記事

 

コメントを残す