
RubyのシンボルについてRubyエンジニアじゃない人でも分かるように簡潔に解説します。
超ザックリRubyのシンボルの使い方。文字列をシンボルに置き換えると考えればいい。処理は同じ。メリットとしては、シンボルは速度が速い。#プログラミング #プログラミング初心者 #プログラミング初心者と繋がりたい #駆け出しエンジニアと繋がりたい #駆け出しエンジニア #ruby #rails #ブログ書け pic.twitter.com/0ubch94nts
— りょすけ (@ryosuke_hu) September 30, 2021
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の記事に丸投げ。
*参考にした記事