読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Rubyテクニック: Rubyの通常の引数とキーワード引数の違い

Ruby

f:id:nipe880324:20150921215037p:plain:w240

Ruby2.0からキーワード引数が導入され、Ruby2.1からRequiredキーワード引数が導入されました。

Rubyの通常の引数とキーワード引数のメリット、デメリット、どういうときにキーワード引数を使ったほうが良さそうかということをまとめました。

キーワード引数の通常の引数に比べたメリット

Rubyの通常の引数に比べ、キーワード引数には次のようなメリットがあります。

1. 引数の意味がわかりやすくなる
2. 引数の順番を気にしなくてもよくなる

それぞれソースコードを交えながら説明します。

メリット1: 引数の意味がわかりやすくなる

通常の引数の場合、引数がある程度増えるとそれぞれの引数が何を意味しているかわかりづらくなってしまいます。

def total(subtotal, tax, discount)
  subtotal + tax - discount
end

total(100, 10, 5) # => 105

キーワード引数を使うことでそれぞれの引数の意味がメソッドの中身を見なくてもわかるようになります。

def total(subtotal:, tax:, discount:)
  subtotal + tax - discount
end

total(subtotal: 100, tax: 10, discount: 5) # => 105

しかし、次のようにとても簡易なメソッドの場合はキーワード引数が冗長になってしまうので通常の引数のほうが良さそうです。

# 通常の引数
def plus(num1, num2)
  num1 + num2
end

plus(3, 5) # => 8

# キーワード引数
def plus(num1:, num2:)
  num1 + num2
end

plus(num1: 3, num2: 5) # => 8

メリット2: 引数の順番を気にしなくてもよくなる

キーワード引数を使うメリットの2つ目として、引数の順番を気にしなくてもよくなります。

# 引数の順番を変えると結果が変わってしまいます
total(100, 5, 10) # => 95

# 引数の順番を変えてもキーワードで指定しているので結果は変わりません
total(subtotal: 100, discount: 5, tax: 10) # => 105

まとめ

キーワード引数をつかうことで読みやすさが向上し、また、順番を気にしなくてもよくなるので積極的に取り入れていったほうが良さそうです。
しかし、本当に簡易なメソッドに対しては、冗長になってしまう箇所もあるので判断は必要です。