シンボル

まず、シンボルについて

Ruby 2.7.0 リファレンスマニュアル を見てみると

 

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

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

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

 

Ruby 2.7.0 リファレンスマニュアルより

https://docs.ruby-lang.org/ja/latest/class/Symbol.html

 

 となっている。

 

irbで過去のようにしてみると下記のようになる

irb(main):001:0> :coron.object_id == :coron.object_id
=> true
irb(main):002:0> "coron".object_id == "coron".object_id
=> false

 

シンボルは『同値ならば同一』がわかる。

:coron は何度記述しても全部同じ。

 

逆にダブルクォテーションで囲んだ文字列は全く同じ記述でも中身が違うことになる。

"coron" は何度記述しても全てが異なるものということになる。

 

じゃあ、どんなときに分ければいいの?と疑問に思うが正直よくわからない。

 

ただ、Rubyのホームページの中の記述を見てみると

『シンボルを使うか文字列を使うかで迷ったなら、 ハッシュのキーのようにオブジェクトを識別したいのか、 それとも前述の”george”などのようにコンテンツを表したいのかを、 選択の指針にしてください。』 Rubyホームページより(https://www.ruby-lang.org/ja/documentation/ruby-from-other-languages/

ということらしい。

 

 

結局わかったことはシンボルは『同値ならば同一』だということ。

正直調べるほど、キーワード引数なども出てきてピンとこなくなりそうなので今回はここまで。

 

ここに関してはもっとわかるようになってからまた文字に起こしてみようと思う。