LoginSignup
0
0

【Ruby】Symbol(シンボル)

Posted at

シンボルとは

簡単に言うと文字列とほぼ同じ見た目のオブジェクト。

もうちょっと詳しく

Rubyの内部ではクラス名、メソット名、変数名などの名前を整数で管理しています。
シンボルも内部的には整数となります。
文字列で処理するより、整数で処理した方がパフォーマンス的に良いから!

不変性(Immutable)

シンボルは変わらないです。
シンボルオブジェクトの変更は不可能です。

メモリアドレスも変わらない

コードで見てみましょう

hello.rb
    string_hello = 'hello'
    symbol_hello = :hello

    puts string_hello.object_id
    puts symbol_hello.object_id
    ruby hello.rb
    # 2840185880
    # 1056668

    ruby hello.rb
    # 2672372840
    # 1056668

    ruby hello.rb
    # 2693385260
    # 1056668

このようにRubyインタプリタがコードを読むたび文字列はメモリアカウントが変わることを確認できます。(object_idはメモリアカウントを返すメソットではありません。object_idが変わってないことはメモリアカウントが変わってないことで間接的に確認しただけです)

上記の理由でシンボルは処理速度が速いです。
メモリの消耗も低い利点があります。

Hashとシンボル

上記の理由でHashのkeyをシンボルにすると
文字列よりメモリ効率も良く、検索速度も早い長所があります。

文字列ではダメ!の場合以外はシンボルを使用した方が良いでしょう。

0
0
0

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
0
0