シンボルとは?
基本的には文字列と同じようなものですが、少し異なります。
シンボルのメリット
- Rubyの内部で、「整数」として管理されているので、文字列の値が同じかどうか通常の文字列に比べると高速に処理できます。
- 同じシンボルであれば、全く同じオブジェクトになるので、大量の同じシンボルを作成する処理等では、メモリの節約になります。
- イミュータブルなオブジェクトなので、文字列のように値を変更することはできませんので、勝手に値を変更されたくないオブジェクトの場合に向いています。
シンボルの特徴
Symbolクラスのオブジェクト
シンボルの用途
ソースコード上で、名前を識別したいが、その名前が必ずしも文字列である必要がない場合に使う。
代表的なシンボルの利用例
ハッシュのキー
文字列をハッシュのキーにするよりもシンボルをキーにした方が高速に値を取り出すことができます。
メソッドの引数
1 2 3 |
def メソッド名(キーワード引数1: デフォルト値1,キーワード引数2: デフォルト値2) #処理内容 end |
メソッドの引数にシンボルを使うことで引数の用途が明確になりプログラムの可読性が上がります。
Railsのリクエストパラメータ
シンボルの使い方
書き方
1 |
:シンボル名 |
ハッシュとは?
「キー」と「値」の組み合わせで管理するオブジェクトです。(Javaで言うところのMapですね。)
配列との使い分け
ハッシュの保持する値はデータ型は異なるデータ型でも構いません。(「文字」と「数字」や「配列」を混在させることも可能です。)配列と違って意味のあるまとまりのようなデータ(HTTPリクエストデータ等)を保持する場合に使います。
ハッシュの使い方
基本
書き方1
従来の記述方法、キーがシンボルにならない。
1 |
ハッシュ変数 = {'キー1'=>'値1','キー2'=>'値2','キー3'=>'値3'} |
例
1 |
countrylang = {'japan'=>'Japanese','chana'=>'Chinese','Korea'=>'Korean'} |
キーをシンボルにしたい場合は下記のように記述する。
1 |
ハッシュ変数 = {:キー1=>'値1',:キー2=>'値2',:キー3=>'値3'} |
書き方2
Ruby1.9で追加された。ハッシュリテラルの記述方法。この書き方はキーが自動的にシンボルになる。
1 |
{キー1:'値1',キー2:'値2',キー3:'値3'} |
書き方3
Ruby2.2から追加された書き方。この書き方もキーが自動的にシンボルになる。
1 |
{'キー1':'値1','キー2':'値2','キー3':'値3'} |
書き方4
Hashクラスのクラスメソッド を使って記述する方法、これもキーがシンボルになる。
1 |
Hash[:a,1,:b,2,:c,3] |
ハッシュを繰り返し処理をさせる
書き方
1 2 |
countrylang.each do |ブロック引数1,ブロック引数2| end |
例
1 2 3 4 5 |
countrylang = {'japan'=>'Japanese','chana'=>'Chinese','Korea'=>'Korean'} countrylang.each do |key,value| puts "#{key}:#{value}" end |
実行結果
ハッシュから値を削除する。
1 |
ハッシュオブジェクト.delete('キー') |
ハッシュから値を取り出す。
1 |
ハッシュオブジェクト[キー] |
ハッシュに値を追加する。
1 |
ハッシュオブジェクト[キー] = 値 |
ハッシュが持っているキーの一覧を知る。
1 |
ハッシュオブジェクト.keys |
ハッシュが持っているバリューの一覧を知る。
1 |
ハッシュオブジェクト.values |
ハッシュが指定したキーを持っているか確認する。
1 |
ハッシュオブジェクト.has_key?(キー名) |
ハッシュのサイズを求める。
1 |
ハッシュオブジェクト.size |
ハッシュのキーにシンボルを使う。
ハッシュのキーは、文字列を使うこともできますが、文字列よりも高速に処理できるシンボルが望ましいです。
ハッシュのキーに対して、シンボルを設定することができます。
その際の書き方としては、「=>」ではなく、「シンボル:'値'」という書き方をすることができます。
実装例
1 2 3 |
countrylang = {japan: 'Japanese',chana: 'Chinese',korea: 'Korean'} puts countrylang[:japan] |
この記事へのコメントはありません。