#シンボル
コロン記号「:」を文字列に前置して定義したもの。
sym = :symbol #シンボル
###後置コロン
シンボルをハッシュキーとして使用する際や、キーワード引数を使用する場合に後置する。
###オブジェクトの1つ
シンボルは文字列とは別物。
メソッド等の名前を識別するためにラベルをオブジェクト化したものになる。
##文字列との違い
###シンボルは値をもたない
シンボルは値をもたないため、文字列そのもののデータを必要としない場合にシンボルが使用される。
###データに特定の意味を持たせる
文字列とはRuby内部での動きも違う。
文字列では宣言されるたびに文字列の領域が生成されるのに対して、
シンボルは1度生成されるとポインタとなり、複数回使用しても同じ領域で使用される。
以下、サンプルコード例)
■文字列
str1 = "samurai"
str2 = "samurai"
p str1.object_id
p str2.object_id
p str1.equal?(str2) #同じオブジェクトならtrue、別のオブジェクトならfalseを返します。
【実行結果】
23122440
23122420
false #同じidではなかった→文字列の場合2つのオブジェクトが作成されている
■シンボル
sym1 = :samurai
sym2 = :samurai
p sym1.object_id
p sym2.object_id
p sym1.equal?(sym2) #同じオブジェクトならtrue、別のオブジェクトならfalseを返します。
【実行結果】
892188
892188
true #同じidだった→シンボルの場合は1つしかオブジェクトが作成されていない
##シンボルのメリット
###メモリ消費が少なく、処理が高速になる
文字列と違い同じ領域を使用しないため、メモリ消費が少なく、処理が高速になる。
###可読性が上がる
簡単な記述で配列が記載できる様になり、シンプルにコードを書くことができる。
■ハッシュ
dog = { "name" => "pochi", "kind" => "shibaken" }
■シンボル
#シンボルをキーにするときは「:」を文字列の後につけます。
dog = {name: "pochi", kind: "shibaken" }