シンボルをどう説明するか

入門者にRubyのシンボルを説明するのは難しいですよね。


オブジェクト指向スクリプト言語Rubyまつもとゆきひろ

シンボルとは「ある文字列と1対1で対応する数値」です。(中略)もともとシンボルはRubyインタプリタがメソッド名やクラス名などの識別子を一元管理するためのものです。

正確な説明ですが、この本にはシンボルの使用例があまり載っていません。1999年発行の本ですが、当時は「ハッシュのキーにシンボルを使う」という習慣はなかったようです。シンボルがやたらと使われだしたのはRuby on Rails以降でしょうか。


『プログラミングRuby言語編』オーム社

Rubyのシンボルは文字列―たいていは名前―に対応する識別子です。

これでは入門者は分からないでしょう。


プログラミング言語Rubyオライリー

Rubyの一般的な実装は、実装が把握しているすべてのクラス、メソッド、変数の名前を格納するシンボルテーブル(記号表)を管理している。

「シンボルとは○○である」という説明がありません。ただし、これに続く解説は丁寧に書かれています。


『たのしいRuby第3版』ソフトバンク

シンボル(Symbol)というのは、文字列に似たオブジェクトで、Rubyがメソッドなどの名前の識別に使うラベルをオブジェクトにしたものです。

ハッシュのところでシンボルが解説されています。シンボルとは何なのかよく分からなくても、超入門者には「ハッシュのキーにはシンボル」ということにしてしまえばいいのかもしれません。


現時点で私がシンボルを説明するとしたら、次のような感じかな。

シンボルとは、メソッド名や変数名、ハッシュのキーなどプログラムの中で使われる「名前」を表すオブジェクトです。シンボルオブジェクトは:fooのように「:文字列」の形のリテラルで作成します。

Rubyはシンボルを「文字列と一対一に対応する整数値」として記録します。シンボルどうしを比較するときは、文字列ではなく整数として比較されるので、文字列の比較よりも高速になります。

シンボルと文字列の違いについての説明...

シンボルは次のように使われます。
1. メソッド名や変数名を表す。respond_to? など...
2. ハッシュのキーに使う。...
3. その他...