Rubyの引数で使えるテクニック|キーワード引数

Rubyをプログラミングしていると、引数を設定することは非常に多いと思います。
少数の引数なら問題ないですが、引数の追加や削除が発生した場合に引数の順番が分かりにくかったり、意味が分かりにくかったりしてきます。
そんな問題を解決できるRubyのキーワード引数を紹介します。
なおキーワード引数はRuby 2.1.0リリース以上になります。
キーワード引数を利用する事によるメリット
1:引数の順番を気にしなくてよくなる。
2:引数の可読性が上がる
まずは通常の引数
例えば月額のサービスがあり、見積もりを算出するメソッドを作ってみます。なお引数は通常の設定を行っています。
以下のサンプルコードは月額と年数、割引金額を入れると 総額が表示されるメソッドです。
def price(m_amount, m_num, discount) p "見積もりは#{m_amount * m_num - discount}円です" end price(25000, 12, 5000)
ここで、仮に契約初期に費用を請求する事になったので、 対応する引数を追加で設定します。
def price(m_amount, m_num, discount, initial_price) p "見積もりは#{m_amount * m_num - discount+initial_price}円です" end price(25000, 12, 5000, 50000)
上記の通り引数が増加し、また登録する値も増加しているので、 引数の順番を間違うと、金額算出に影響がでてきます。
これをキーワード引数で設定してみます。
キーワード引数のサンプルコード
それでは、先程紹介したメソッドをキーワード引数で設定します。
キーワード引数は、引数名へ:を設定すればキーワード引数として認識されます。
def price(m_amount:, m_num:, discount:, initial_price:) p "見積もりは#{m_amount * m_num - discount+initial_price}円です" end price(m_amount:25000, m_num:12, discount:5000, initial_price:50000) #引数の順番を変更しても、出力結果は変わらない price(discount:5000, initial_price:50000, m_amount:25000, m_num:12)
デフォルト引数も設定可能
以下の通りデフォルト引数の設定も可能です。
対象引数に値が存在する場合は、指定値で上書きされます。
def price(m_amount:, m_num:12, discount:10000, initial_price:) p "見積もりは#{m_amount * m_num - discount+initial_price}円です" end price(m_amount:25000, discount:5000, initial_price:50000)
以上になります。
その他関連記事
初心者・独学者向け|Rubyのinitializeメソッドとは
初心者・独学者向け|Rubyの配列処理の入門とよく使うメソッド
Rubyの資格試験|Ruby技術者認定試験 (Silver version 2.1)の解説と対策概要
【初心者・独学者向け】Ruby On Railsで使いやすいメソッド.present?の紹介
Ruby On Railsのin? メソッドで任意のオブジェクトに配列が含まれているか判別する
paiza(パイザ)Cランク練習問題|5以上の整数の合計のRubyサンプルコードと解説