始めに
普段、仕事でRuby on Railsを使っていています。Railsの使い方は少しずつは慣れてきた部分もありますが、Rubyの言語としての基礎をまだまだしっかり学べていないため、「何となく書いてみて動かなかったら変更してみる」という状態になってしまっている部分もあると自覚しています。
特にシンボル変数などの理解が薄く、Railsの他のコードで:を付けているので何となくシンボル変数にしておこう。という発想でコードを書いてしまっていることもありました。そこで今回シンボルとハッシュについて自分の言葉でまとめていきたいと思います。
ハッシュとは
ハッシュとはキーと値のセットからなるデータを、管理するオブジェクトのことになります。{ キー1 => 値1, キー2 => 値2, キー3 => 値3 }というように表現され、一対一に対応するデータ構造を扱いたいというような時に使われるオブジェクトになります。今回はキーとして文字列を使用して、コード例としては以下のようになります。
test_scores = { 'yamada' => 59, 'takahashi' => 88, 'yoshida' => 95 }
シンボルとは
続いてシンボルとは見た目は文字列に近いですが、文字列と比べて条件式に使う際に高速に処理が出来て内部的にはシンボルは整数として扱われます。またシンボルは同じシンボルであれば同じオブジェクトであるという特徴があり、大量の文字列と大量のシンボルで比較した場合シンボルを使った方がメモリ効率が良くなります。またシンボルはイミュータブルであり、データを途中で変更されたくない場合に適しています。
ハッシュとシンボルを組み合わせる
先ほどハッシュを作成した際にキーには文字列を使って作成しましたが、キーにはシンボルを使う方が好ましくハッシュのキーをシンボルにして書き直すと以下のようになります。
test_scores = { yamada: 59, takahashi: 88, yoshida: 95 }
キーをシンボルにした場合、=>を使わず、ハッシュのキー: 値というような形で書くことが出来ます。またコロンが左側から右側に移動します。そして見た目だけでなく、シンボルはイミュータブルなのでハッシュのキーに使う場合、キーが勝手に変更されると困るのでそういった意味でもハッシュのキーにシンボルを使う利点はあります。
こちらのハッシュの書き方はRailsを書いてる時にもモデルのバリデーションの部分などでよく使ってる文法ですね。いかにこれまで意識せずにシンボルを何となく使っていたかが良く分かりました。今後はキーがシンボルのハッシュを書いているという意識を持ってコードを書いていきます。