Rubyのシンボル(Symbol)とは?文字列との違いと使いどころをわかりやすく解説
Rubyでは、:name
や :id
のようにコロン(:)で始まる「シンボル(Symbol)」という型があります。
シンボルは文字列に似ていますが、軽量で一意な識別子としてよく使われます。
シンボルの基本
シンボルは、コロンを先頭に付けて表記します。
例えば:
:name
:email
:status
見た目は文字列に似ていますが、実体は文字列とは別物です。
文字列との違い
"apple" == "apple" # → true
"apple".object_id == "apple".object_id # → false(毎回別オブジェクト)
:apple == :apple # → true
:apple.object_id == :apple.object_id # → true(同じオブジェクト)
シンボルは、同じ名前なら常に同じオブジェクトとして扱われるため、メモリ効率が良いのが特徴です。
シンボルの使いどころ
@ ハッシュのキーとして
user = {
name: "さくら",
age: 25
}
puts user[:name] # → さくら
ハッシュのキーには、文字列よりもシンボルを使うのが一般的です(読みやすく、効率も良いため)。
A メソッド名の指定
send(:upcase) # → メソッド名をシンボルで渡す
"hello".send(:upcase) # → "HELLO"
send
のようなメタプログラミングでは、メソッド名をシンボルで渡すのが基本です。
B case文の条件に
status = :loading
case status
when :ready
puts "準備完了"
when :loading
puts "読み込み中"
else
puts "不明な状態"
end
シンボルとパフォーマンス
- メモリ使用量が少ない
- 比較が高速(==演算子)
- 大量生成するとガベージコレクションされない点に注意
頻繁に使う識別子や定数的な値に向いていますが、動的にたくさん生成する用途には不向きです。
シンボルから文字列への変換
:name.to_s # → "name"
:email.to_s.upcase # → "EMAIL"
文字列からシンボルへの変換
"status".to_sym # → :status
"yes".intern # → :yes
まとめ
Rubyのシンボル(Symbol)は、軽量で高速な識別子として非常に便利です。
特に、ハッシュのキーやメソッド名の指定など、値が変わらない用途で活用されます。
「表示や操作には文字列」、「識別や比較にはシンボル」と使い分けることで、効率よくプログラミングができます!