引数にデフォルト値を設定しよう
学習の目標
本章では、以下の内容を学習します。
- デフォルト値付き引数の概念と利点を理解する
- デフォルト値の設定方法を習得する
- デフォルト値付き引数を使ったメソッドの呼び出し方を学ぶ
- 複数の引数にデフォルト値を設定する方法を理解する
- デフォルト値を活用した実践的なコード例を学ぶ
はじめに
前回までに、メソッドに引数を渡す方法と、複数の引数を扱う方法を学びました。しかし、メソッドを使う際に毎回すべての引数を指定するのは面倒なこともあります。
例えば、ユーザー名を表示するメソッドがあるとして、ログインしていない場合は「ゲスト」と表示したいケースを考えてみましょう。これまでの知識では、毎回「ゲスト」かユーザー名かを判断して引数に渡す必要がありました。
このような場合に便利なのがデフォルト値付き引数です。デフォルト値を設定しておくと、引数を省略したときに自動的にその値が使われます。よく使う値をデフォルト値として設定しておくことで、メソッドをより便利に使えるようになります。
ファイルの準備
まずは、実習用のファイルを作成しましょう。
VS Codeで新しいファイルを開き、default_arguments.rb
という名前で保存します。これから、このファイルにメソッドを定義していきます。
メソッドの定義
デフォルト値付き引数の基本的な使い方を理解するために、2つのメソッドを比較してみましょう。まずは通常の引数を持つメソッドと、デフォルト値付きの引数を持つメソッドを作成します。次のコードを入力してください。
def greet_without_default(name) puts "こんにちは、#{name}さん"end
def greet(name = "ゲスト") puts "こんにちは、#{name}さん"end
greet_without_default("山田") # こんにちは、山田さんと表示される# greet_without_default # エラー:引数が不足している
greet("山田") # こんにちは、山田さんと表示されるgreet # こんにちは、ゲストさんと表示される
ここでは2つのメソッドを定義しています。違いを詳しく見てみましょう。
greet_without_default
メソッドは、引数name
を必須としています。このメソッドを呼び出すときは、必ず引数を指定する必要があります。greet
メソッドは、引数name
にデフォルト値"ゲスト"
を設定しています。引数を省略すると、このデフォルト値が自動的に使われます。
デフォルト値は、引数名の後ろに=
と値を書くことで設定できます。この例ではname = "ゲスト"
としています。
コードを実行してみると、greet_without_default("山田")
とgreet("山田")
の結果は同じですが、greet
メソッドは引数なしでも呼び出せます。コメントアウトされているgreet_without_default
呼び出しのコメントを外して実行すると、以下のようなエラーメッセージが表示されます。
wrong number of arguments (given 0, expected 1)
これは「引数が0個渡されましたが、1個必要です」という意味です。デフォルト値を設定しておくと、このようなエラーを防ぐことができます。
実践的な例:消費税の計算
デフォルト値付き引数の実用的な例として、消費税の計算をするメソッドを見てみましょう。以下のコードを追加してください。
def calculate_total(price, tax = 0.1) price + (price * tax)end
puts calculate_total(1000) # => 1100.0と表示される(税率10%)puts calculate_total(1000, 0.08) # => 1080.0と表示される(税率8%)
このメソッドは2つの引数を持ちます。
price
:商品の価格(必須)tax
:税率(デフォルト値は0.1、つまり10%)
ほとんどの場合、消費税は10%なので、tax
引数にデフォルト値として0.1
を設定しています。こうすることで、通常の買い物なら引数を1つだけ渡せばよく、特別な税率(例えば軽減税率の8%)を適用したい場合だけ2つ目の引数を指定すればよいです。
これにより、メソッドの使いやすさが大幅に向上します。もし毎回税率を指定する必要があったら、calculate_total(1000, 0.1)
のように書かなければならず、繰り返し同じ値を書くことになってしまいます。
割引価格の計算例
もう一つ実用的な例を見てみましょう。商品の割引価格を計算するメソッドを作ってみます。以下のコードを追加してください。
def calculate_discount_price(price, discount_rate = 0.2) discounted_price = price * (1 - discount_rate) discounted_price.to_i # 整数に変換して返すend
puts calculate_discount_price(5000) # => 4000と表示される(20%割引)puts calculate_discount_price(5000, 0.3) # => 3500と表示される(30%割引)
このメソッドは、商品の価格と割引率を受け取り、割引後の価格を計算します。割引率のデフォルト値は0.2
(20%)に設定されています。
通常のセールでは20%割引が適用されることが多いと仮定して、それをデフォルト値にしています。特別セールなどで割引率を変更したい場合は、2つ目の引数で明示的に指定できます。
このように、よく使う値や標準的な値をデフォルト値として設定しておくと、メソッドの使い勝手が良くなります。
複数のデフォルト値
複数の引数にデフォルト値を設定することもできます。例として、メッセージを作成するメソッドを見てみましょう。以下のコードを追加してください。
def create_message(name = "名無し", greeting = "こんにちは") puts "#{greeting}、#{name}さん"end
create_message("山田", "おはよう") # => おはよう、山田さんと表示されるcreate_message("山田") # => こんにちは、山田さんと表示されるcreate_message # => こんにちは、名無しさんと表示される
このメソッドは2つの引数を持ち、どちらにもデフォルト値が設定されています。
name
:名前(デフォルト値は"名無し"
)greeting
:挨拶(デフォルト値は"こんにちは"
)
このメソッドは、引数の与え方によって動作が変わります。それぞれのケースを確認してみましょう。
両方の引数を指定する場合
create_message("山田", "おはよう") # => おはよう、山田さんと表示される
両方の引数を指定した場合、デフォルト値は使われず、指定した値("山田"と"おはよう")が使われます。
最初の引数だけ指定する場合
create_message("山田") # => こんにちは、山田さんと表示される
最初の引数だけを指定した場合、最初の引数には指定した値("山田")が使われ、2つ目の引数にはデフォルト値("こんにちは")が使われます。
両方の引数を省略する場合
create_message # => こんにちは、名無しさんと表示される
両方の引数を省略した場合、両方ともデフォルト値が使われます。つまり、name
には"名無し"、greeting
には"こんにちは"が使われます。
引数の順序と省略
複数の引数にデフォルト値がある場合、重要なポイントは左から順に引数が割り当てられるということです。例えば、1つだけ引数を渡した場合、それは最初の引数(name
)に割り当てられます。
もし、2つ目の引数(greeting
)だけを指定したい場合はどうすればよいでしょうか?実は、このような場合は最初の引数も省略せずに指定する必要があります。
create_message("名無し", "おはよう") # => おはよう、名無しさんと表示される
これはやや不便ですが、Rubyでは次の章で学ぶ「キーワード引数」という機能を使うことで、より柔軟に引数を指定できるようになります。
デフォルト値の活用場面
デフォルト値付き引数は、以下のような場面で特に役立ちます。
- よく使う値がある場合(消費税率、標準的な設定値など)
- オプショナルな機能を提供したい場合(詳細表示のオプションなど)
- 後方互換性を維持したい場合(既存のメソッドに新しいオプションを追加する場合)
デフォルト値を適切に設定することで、メソッドの使いやすさと柔軟性が大幅に向上します。メソッドを設計する際は、「どの引数が省略可能か」「省略された場合にどのような値が適切か」を考えるとよいでしょう。
まとめ
本章では、デフォルト値付き引数について学習しました。以下の内容をマスターできたことと思います。
- デフォルト値を設定しておくと、引数を省略したときに自動的にその値が使われる
- デフォルト値は、引数名の後ろに
=
と値を書くことで設定できる - よく使う値をデフォルト値として設定しておくことで、メソッドの使い勝手が良くなる
- 複数の引数にデフォルト値を設定することもでき、必要な値だけを渡すことができる
- デフォルト値は「引数が省略されたときのみ」使用される
デフォルト値付き引数を使いこなせるようになると、よりシンプルで使いやすいコードが書けるようになります。適切な場面でデフォルト値を活用し、メソッドの使いやすさを向上させましょう。
次の章では、引数をさらに柔軟に扱える「キーワード引数」について学んでいきます。
Starterプランでより詳しく学習
この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。