Rubyの:(コロン)の種類について
Rubyを学習していて当たり前のように使っていた:(コロン)。
たくさんの種類がある事を知らずに何となくで使用していました。
基本を押さえておけば、後々の学習にも役立つと思いまとめました。
この記事はUdemyの以下の講座を参考にまとめさせて頂きました。
無料で公開されているなので、気になる方は是非。
Udemy
:(コロン)の種類
シンボル
:asdf
文字列の先頭にコロンがある場合は、シンボルのコロン。
シンボルは文字列の上位版。
シンボルは重複を許さず、シンボルの中身が同じであれば、コンピュータ内部では1箇所に保存され、処理速度がちょっと速くなったりするらしい。
文字列の場合は、中身が同じであってもコンピュータ内部では、別々の保存領域が必要。
シンボルをキーにしたハッシュの定義
まずはハッシュがどういうものかというと、
hash1 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }
キーとバリューがセットになっているのがハッシュ。
ちなみに配列は重複した値を[]内に入れる事ができますが、ハッシュは重複(duplicated)したキーで違う値を定義することはできません。
ここまでの内容でわかったことは、
・ハッシュのキーはキー同士の重複を許さない
・シンボルもコンピュータの内部上、重複を許さない
この重複を許さない性質をもつハッシュとシンボルは非常に相性がいい。
そしてハッシュは次のように定義ができる。
hash1 = { "key1" => "value1", "key2" => "value2", "key3" => "value3" }
hash2 = { :key => "value" }
/これが正式な書き方/
hash2 = { key: "value" }
/これはシンボルをキーにした省略系の書き方/
つまり、{}の中の後ろコロンは、シンボルをキーにしたハッシュのコロンというわけです。
メソッドのキーワード引数
メソッドとは、よく自動販売機に例えられます。
自動販売機は、お金を入れてボタンを押すとジュースが出てきます。
メソッドは、引数を渡してメソッドを実行すると戻り値が返ってきます。
何かを入れて、何を実行すると、何かが返ってくるものがメソッド。
キーワード引数を使用したメソッドは以下のようになります。
/普通の引数とメソッド/
def add(hikisu1, hikisu2)
kotae = hikisu1 + hikisu2
return kotae
end
puts add(3, 4)
/キーワード引数とメソッド/
def add(hikisu1:, hikisu2:)
kotae = hikisu1 + hikisu2
return kotae
end
puts add(hikisu: 3, hikisu2: 4)
そしてキーワード引数には以下の特徴があります。
- 引数に見出し(タイトルをつける事ができる)
- キーワード引数は順番が入れ替わってもOK
- 通常の引数と一緒に使える
- メソッドの呼び出しは括弧を省略できる
railsを使っているとこんなコードをよく見かけます。
render ("users/user", user: @user)
/()は省略可/
1つ目は普通の引数ですが、user: @userの部分はキーワード引数です。
メソッドを呼び出す時の引数として後ろコロンが使われていたら、それはキーワード引数。
よく見るコードの解説
ここまで理解ができればきっと次のコロンもどんなものかがわかるはず。
validates :content, presence: true, length: { maximum: 50 }
validatesというメソッドがあって、それに対する引数が記述されています。
以下がvalidatesメソッドに渡されている引数たち。
:content
→先頭にコロンがあるのでシンボル!
presence: true
→validatesメソッドの引数部分で後ろコロンなのでキーワード引数
presence:というキーワード引数は、trueですよって渡してる(presenceという見出しをつけてる)
length:
→validatesメソッドの引数部分で後ろコロンなのでキーワード引数
{ maximum: 50 }
→波括弧があるからこれはハッシュ
ハッシュの内側で後ろコロンは、シンボルをキーにしたハッシュ。
続いてこちら
<%= link_to '削除する', @post,
method: :delete,
data: { confirm: '本当に削除してOK?'} %>
細かく分解していくと、
link_to
→これがまずメソッドになります。そしてlink_to以下はメソッドに与えられた引数。
'削除する'
@post
→それぞれ第一引数、第二引数。
method:
→キーワード引数
:delete
→シンボル
:data
→キーワード引数
{ confirm: '本当に削除してOK?'}
→波括弧はハッシュ。
ハッシュの内側に後ろコロンがあるから、シンボルをキーにしたハッシュ。
まとめ
- 先頭にコロンがあったらシンボル
- ハッシュの内側に後ろコロンが会ったら、シンボルをキーにしたハッシュ
- メソッドの引数部分に後ろコロンがあったら、メソッドのキーワード引数