1. 概要
Rubyでは、キーワード引数を取ることができる。
さらに、Ruby 2.1より、キーワード引数のデフォルト値を省略することができるようになった。
これにより、メソッドをより簡潔に実装することができる。
2. 例
UserがItemに対してLikeするシステムについて考える。
ここで、current_user
の@item
に対するlike
を取得するfind_like_by_item
メソッドは以下のように書ける。
※ 簡潔な実装を分かりやすく示すためであり、こじつけな例である
# View
link_to 'Like', like_path(current_user.find_like_by_item(@item)), method: :post, remote: true
# Model
class User < ActiveRecord::Base
:
def find_like_by_item(item)
likes.find_by(item_id: item.id)
end
end
これは、キーワード引数を用いると以下のように書ける。
# View
link_to 'Like', like_path(current_user.like(item: @item)), method: :post, remote: true
# Model
class User < ActiveRecord::Base
:
def like(item:)
likes.find_by(item_id: item.id)
end
end
キーワード引数が必須であるため、:item
を渡す必要があることが自明であり、すなわちItemに対するLikeを取得するということが分かりやすくなる。
3. 備考
実装においては、メソッドを見てその振る舞いが分かりやすくなければならない。
なので、簡潔に記述するためのひとつの方法と捉えておくべき。