1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby シンボルについて

Last updated at Posted at 2020-06-06

シンボル

シンボルとは、任意の文字列と一対一に対応するオブジェクトのこと。
シンボルの構文は、シンボルはコロン(:)に続けて任意の名前を定義する。

:シンボルの名前

(例)

:sushi 
:ruby
:pen 

シンボルと文字列の違い

:sushi.class # =>Symbol
'sushi'.class # =>String

シンボルはSymbolクラスのオブジェクト
文字列はStringクラスのオブジェクト

string = 'sushi'
string.upcase! # => "SUSHI"

# シンボルは、イミュータブルなので、破壊的な変更は不可能
symbol = :sushi 
symbol.upcase! # => ruby.rb:5:in `<main>': undefined method `upcase!' for :sushi:Symbol (NoMethodError)

文字列は破壊的な変更が可能
シンボルは不可能

ミュータブルは、変更可能なという意味で、
イミュータブルは、変更できない、不変のという意味です。

文字列といった、ミュータブルなオブジェクトには破壊的な変更が適用できます。
しかし、
シンボルなどのイミュータブルなオブジェクトでは破壊的な変更が適用できません。
なので、シンボルは「何かに名前をつけたい、名前なので誰かによって勝手に変更されては困る」という用途に向いています。

◎イミュータブルなオブジェクトはデータ型で4種類

  • 数値: integer・floatクラス
  • シンボル: symbolクラス
  • 真偽値: true,falseクラス
  • nil: nilクラス

シンボルの特徴/ 主な用途

  • 表面上は文字列っぽいので、プログラマにとって理解しやすい
  • 内部的には整数なので、コンピュータは高速に値を比較できる
  • 同じシンボルは同じオブジェクトであるため、メモリの使用効率が良い
  • イミュータブルなので、勝手に値が変えられる心配がない

※ シンボルは同じシンボルであれば、全く同じオブジェクトであるという特徴があります。
このため、「大量の同じ文字列」と「大量の同じシンボル」を作成した場合、シンボルの方がメモリの使用効率が良くなります。

シンボルがよく使われるのは、ソースコード上では名前を識別できるようにしたいが、その名前が必ずしも文字列である必要がない場合です。
代表的な利用例は、ハッシュのキーです。
ハッシュのキーにシンボルを使うと、文字列よりも高速に値を取り出すことができます。

参考にした文献

プロを目指す人のためのRuby入門

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?