こんにちは! フリーエンジニアの長瀬です。
みなさんはHash(ハッシュ)を使いこなしていますか?
この記事では、ハッシュの使い方についてまず、コロンの正体がシンボルであることを説明した後、Rubyで使われるハッシュについて基礎文法を網羅しました。
コロンを使った表記は珍しいので、初めは違和感があると思いますが、しっかりマスターして、できるRubyistに一歩前進しましょう。
コロンとは
コロンの意味
「:」コロンはRubyにおいて、そのオブジェクトがシンボルであることを明示するための記号です。
hash1 = {:Ruby=>"Rails",:Python=>"Django"} hash2 = {Ruby:"Rails",Python:"Django"}
例えばRubyを勉強しているかたなら、上記のようなコロンのついている文字を見かけて、なんで:(コロン)がくっついているんだ気持ち悪い!と一度は思ったことがあると思います。
この:(コロン)をつけて表現すると、Rubyはシンボルとしてそのオブジェクトを扱います。
シンボルを使う理由
「別にシンボルなんてものがなくても、文字列だけでいいじゃないか」と思った方も多いのではないでしょうか?
しかし、実はシンボルを使うと文字列で普通に定義した時と比べて、少しだけ処理を高速化することができるからです。
まずシンボルはRuby内部では数値として扱われるので、文字列と比べればメモリサイズが軽くなります。
さらに文字列は定義するごとに新しいオブジェクトを生成しますが、シンボルはただ1つしか生成されず、その後呼び出したときはすべてその1つから値を参照します。
つまり、1つのオブジェクトだけで済むのでメモリを節約できます。
例えば、さきほどの例にあった:nameは表示の上では:nameですが、Rubyは:nameのことを数字だと思って扱っています。
あくまでも、イメージですが:name=3898 :Ruby=2232は表示の上では文字列です。
けれど、Rubyは3898,2232の数字にしか興味がないのです。
少し例が悪いですが、それは囚人番号のようなものです。
そうです囚人番号で呼べば、看守(Ruby)は何百人もの囚人の名前を覚える必要がない分、楽ができるというわけです。
Rubyは人間に比べれば記憶力がいいので、何百人であろうと名前を覚えることができますが番号を使った方がはるかに楽なことがわかります。
また囚人番号の例を使えば、シンボルのオブジェクトがただ1つだけ生成されるということも理解しやすいです。
そうです、現実でも同じ人間は2人存在しませんよね?
というわけで同じように、シンボルも重複して生成されないのです。
では、そんなシンボルを使ったハッシュの基礎文法を学んでいきましょう。
シンボルについてはこちらでまとめられているので参考にしてみてください。
ハッシュの基本形(リテラル)
ハッシュは、ブレース「{}」で囲み、カンマ「,」区切りで記述します。
キーと値のペアを「=>」で関連づけます。
キーと値には、数値や文字列を使うことができます。
# name、scoreはキー、samurai、80は値 { "name" => "samurai", "score" => 80 } # キーはシンボルでも可能 { :name: => "samurai", :score => 80 } # キーがシンボルの場合は省略形が使える(コロン「:」の位置が逆になる) { name: "samurai", score: 80 }
ハッシュの基本的な使い方
値の取得
hash = { 1 => "Samurai", 2 => "Ruby", "third" => "Rails" } hash[2] = "Samurai" hash["third"] = "Rails"
値の追加
hash = { 1 => "Samurai", 2 => "Ruby", "san" => "Rails" } hash[4] = nil hash[5] = "Python"
値の更新
hash = { 1 => "Samurai", 2 => "Ruby", "san" => "Rails" } hash[1] = "Python"
値の削除
hash = { ruby: 'Rails', python: "Django" } hash.delete(:ruby)
要素数の取得
# sizeメソッドかlengthメソッドを使用する hash.size hash.length
ハッシュでよく使うメソッド
参考書籍
たのしいRuby 第5版
ハッシュの作成方法、操作方法をはじめ、Hashクラスの基本的な使い方が解説されています。
また、応用問題まであるので使い方の練習をすることもできます。
パーフェクトRuby (PERFECT SERIES 6)
こちらもHashの作成方法、操作方法などについて解説されていますが、大型本なので豊富なサンプルコードをもとに解説されています。
より理解を深めたい場合に参考になりました。
侍編集部のおすすめ
侍編集部では、入門・中級・上級にレベル分けをしてRubyの書籍を紹介しています。
自分のレベルにあった書籍がきっと見つかるので、参考にしてみてください。
まとめ
いかがでしたでしょうか?
この記事では、コロンがシンボルだということが判明した後に、ハッシュの基本文法を解説しました。
この記事を読んだ方が少しでもコロン(シンボル)の違和感を解消できれば、ライターとして幸いです。
シンポルを上手に使いこなせるようになると、メモリを節約できるようになるのでぜひマスターしておいてください。
もしシンポルの意味やハッシュの基本文法について忘れてしまったらこの記事を確認してくださいね!