😎
Ruby, Railsの「:」について
結論
- 前コロン は「シンボル」
- hash{} の内側の後ろコロン は「シンボルをキーにしたhash」
- メソッドの引数の後ろコロン は「メソッドのキーワード引数」
説明
1. 前コロン は「シンボル」
- シンボルとは、ざっくりいうと、文字列の上位互換。
- 別の変数に、同じシンボルを定義すると、それらはPC上は同じ領域に保存される。→ 重複しない。
mojirestu = "abc" # 文字列
shinboru = :abc # シンボル
2. hash{} の内側の後ろコロン は「シンボルをキーにしたhash」
hash1 = { "id" => 1, "key" => "value" } # 文字列をキーにしたhash
hash2 = { :id => 1, :key => "value" } # シンボルをキーにしたhash
hash3 = { id: 1, key: "value" } # シンボルをキーにしたhash(簡略ver.)
3. メソッドの引数の後ろコロン は「メソッドのキーワード引数」
- メソッドのキーワード引数 = 見出しをつけた引数
- キーワード引数は、順番は関係ない。
- キーワード引数は、通常の引数と併用できる。
- メソッドの呼び出しは、カッコを省略できる。
# 通常の引数
def add(num1, num2)
result = num1 + num2
end
p add(2, 3)
# キーワード引数
# 「メソッドのキーワード引数 = 見出しをつけた引数」
def add(num1: , num2:)
result = num1 + num2
end
p add(num1: 2, num2: 3)
# 「キーワード引数は、順番は関係ない。」
p add(num2: 3, num1: 2) # OK
# 「メソッドの呼び出しは、カッコを省略できる。」
p add num1: 2, num2: 3 # OK
# 「キーワード引数は、通常の引数と併用できる。」
render "users/signin", user: @user
# ↓
render("users/signin", user: @user) # 第1引数は通常の引数、第2引数はキーワード引数
具体例
validates :content, presence: true, length: {maximum: 50}
# validates(:content, presence: true, length: {maximum: 50})
- validates
メソッド - :content
validatesメソッドの第1引数。シンボル。 - presence: true
validatesメソッドの第2引数。presenceというキーワード引数に、trueを指定している。 - length: {maximum: 50}
validatesメソッドの第3引数。lengthというキーワード引数に、hashを渡している。
参考文献
Discussion