ラベル付き引数
- 引数名がはっきりしているので渡す内容がわかりやすい。
- rubymineのIDEなどで自動保管してくれる
- 渡し忘れの引数があればエラーが出る
- デフォルト値も指定できるのでデフォルト値指定した分は省力できる
- 引数の順番気にしなくていい
# 定義
def some_method(user: , require: false)
end
# 呼び出し型
some_method(
user: current_user
)
some_method(
user: current_user,
require: true
)
普通の引数
- rubymineのIDEなどで引数名は把握できる
- 渡し忘れの引数があればエラーが出る
- デフォルト値も指定できるのでデフォルト値指定した分は省力できる
- 引数の順番を気にしなくてはいけないので数が多いと面倒
- 1・2個の引数でメソッド名からもわかりやすければ楽
- User.find(1) / User.find_by(id: 1) 左が楽
def some_method(user, require = false)
end
some_method(
current_user,
true
)
ハッシュの引数
- 引数がわからない
- 引数の増減で引数の定義を変更しなくてよい(唯一のメリット)
- hash名が入るので打つべき文字数は増えがち
- 何かしらの構造体やモデルのインスタンスを渡すならばそこに責務が発生するが、ただのハッシュだと中身は全く何がくるか、何が必要かわからない
def some_method(arg={})
user = arg[:user]
raise unless user
require = arg[:require] || false
end
some_method({
user: current_user,
require: true
})