【Ruby】レッスン3-02:デフォルト引数とキーワード引数の使い方

50110130

一つ前のページではメソッドの基本について学習しました。

今回は デフォルト引数とキーワード引数 について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド

 ・Lesson3-1:メソッドの基本を理解しよう
 ・Lesson3-2:デフォルト引数とキーワード引数を理解しよう ◁今回はココ
 ・Lesson3-3:メソッドの戻り値を理解しよう
 ・Lesson3-4:真偽値を返すメソッドを理解しよう
 ・Lesson3-5:エラーメッセージを読めるようになろう
 ・Lesson3-6:例外処理を理解しよう
 ・確認問題3-☆1:石取りゲームを作ろう
 ・確認問題3-☆2:丁半賭博ゲームを作ろう
Lesson4:コレクション
Lesson5:オブジェクト指向編

<<前のページ

Rubyの記事一覧

次のページ>>

Rubyの「デフォルト引数」と「キーワード引数」の違いと使い分け方

Rubyではメソッドの引数に「デフォルト引数」と「キーワード引数」を設定することが可能です。

これらを活用することで、メソッドを呼び出す際に必要な引数の指定方法に柔軟性を持たせることができます。

このページでは、このデフォルト引数とキーワード引数の使い方について詳しく解説します。

デフォルト引数とは何か|初期値の指定と活用法

デフォルト引数とは、メソッド定義時に引数の初期値を設定できる機能です。

この初期値はメソッドを呼び出すときに引数を省略した場合にのみ使用されます。

たとえば次のように定義できます。

def greet(name = "ゲスト")        # デフォルト引数を持つgreetメソッドを定義
  puts "こんにちは、#{name}さん!"
end

greet           #=> こんにちは、ゲストさん!(デフォルト引数を使用)
greet("たろう") #=> こんにちは、たろうさん!(「たろう」を引数に指定)

この例ではnameに値を渡さなかった場合は「ゲスト」が使用されますが、引数が指定された場合はその値が優先されます。

デフォルト引数を使うことで、メソッド呼び出しの際に柔軟な対応ができ、不要な引数を省略することでコードの可読性も向上します。

キーワード引数の基本|名前付きで引数を渡す方法

キーワード引数とは引数名を指定してメソッドに値を渡す方法です。

Rubyではキーワード引数を使うことで、どの引数にどの値を渡しているのかを明確に記述できます。

これは引数の数が多くなる場合に特に役立ちます。キーワード引数を用いる例を見てみましょう。

キーワード引数を使用するときには、引数名の後ろに「:」を付けます。

def introduce(name:, age:) #二つのキーワード引数を持つメソッドを定義
  puts "私は#{name}です。#{age}歳です。"
end

introduce(name: "はなこ", age: 25) #=> 私ははなこです。25歳です。

ここで定義されたintroduceメソッドは、nameageというキーワード引数を持っています。

メソッド呼び出しの際に引数名を明示するため、コードが直感的に理解しやすくなります。

またキーワード引数を指定しないとエラーになるため、必要な情報が欠けるのを防ぐことができます。

両者の組み合わせ例|柔軟な引数指定を実現しよう

デフォルト引数とキーワード引数は組み合わせて使用することも可能です。

次の例ではaddメソッドを定義し、キーワード引数aとデフォルト引数bを指定しています。

def add(a:, b: 20)
  puts a + b
end

add(a: 10)     #=> 30
add(a: 10, b: 5) #=> 15

このaddメソッドではaは必須のキーワード引数で、bはデフォルト値が設定されています。

そのためaddメソッドを呼び出す際にbを省略すると、bにはデフォルト値の20が使用されます。

またbに別の値を渡すと、その値が優先的に使われます。

デフォルト引数とキーワード引数を適切に組み合わせることで、柔軟かつ分かりやすいコードが実現できます。

まとめ|使い分けでメソッドをより便利に

【初心者向け】Rubyのメソッドと例外処理と使い方を分かりやすくまとめた概念図と使用例。 特にメソッドの呼び出しや戻り値、デフォルト引数とキーワード引数、例外処理の仕組みについて視覚的に理解できるようまとめている。

Rubyのデフォルト引数とキーワード引数は、メソッドの使い勝手を向上させる便利な機能です。

デフォルト引数により省略可能な引数を設定したり、キーワード引数により引数の位置に依存しない呼び出し方を実現できます。

これらの仕組みを活用して、読みやすく柔軟なコードを作成しましょう。

練習問題|引数の初期値とキーワード指定を使ってみよう

デフォルト引数とキーワード引数をしっかりと身に着けるため、練習問題に挑戦しましょう。

デフォルト引数とキーワード引数の練習課題に挑戦

メソッドの引数にデフォルト値を設定する方法を学ぶためのプログラムを作成しましょう。

このプログラムでは2つの引数を受け取り、それらの合計を表示するメソッドを作成します。

一方の引数にはデフォルト値を設定し、もう一方の引数は必須とします。

引数を1つだけ指定した場合にはデフォルト値が使われ、2つ指定した場合は指定した値同士の合計が表示されます。

以下の要件に従ってコードを完成させてください。

  1. addという名前のメソッドを定義すること。
  2. メソッドaddは、キーワード引数abを持つこと。
    • 引数aにはデフォルト値を設定せず、必ず値を指定すること。
    • 引数bにはデフォルト値10を設定すること。
  3. メソッド内で、引数abを足し合わせ、計算結果をputsで出力すること。
  4. 以下の2通りの呼び出し方法を用意し、それぞれで結果を表示すること。
    • add(a: 15) // デフォルト値b: 10を使用する。
    • add(a: 15, b: 20) // bに新しい値を指定する。

ただし、以下のような実行結果となるコードを書くこと。

計算結果: 25
計算結果: 35

【ヒント】自力で解くのが難しい人へ

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:メソッドaddの定義
  □ 引数aと、デフォルト値が10の引数bを設定
2:putsで”計算結果: “とa + bの計算結果を出力
3:メソッドaddの呼び出し;キーワード引数a: 15を指定
4:メソッドaddの呼び出し;キーワード引数a: 15b: 20を指定

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

def add(a:, b: 10)
=begin
  【穴埋め問題1】
  ここでputsを使って「計算結果:」と、aとbを足した結果を表示するコードを書いてください。
=end
end

=begin
【穴埋め問題2】
ここでaddメソッドをキーワード引数aのみを指定して呼び出すコードを書いてください。
=end

=begin
【穴埋め問題3】
ここでaddメソッドをキーワード引数aとbの両方を指定して呼び出すコードを書いてください。
=end

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

この問題の解答例と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
def add(a:, b: 10)
  # 引数aとbを足し合わせて結果を表示する
  puts "計算結果: #{a + b}"
end

add(a: 15)

add(a: 15, b: 20)
Q
正解コードの解説

コードをブロックごとに分割して解説します。

メソッドaddの定義

def add(a:, b: 10)

この行ではaddというメソッドを定義しています。

ここで使われているa:b:がキーワード引数です。キーワード引数とは、引数に名前をつけて指定できるもので、a:b:のようにコロンを付けることで明示的に引数を呼び出せます。

またb: 10のように指定することで、bには「デフォルト引数」として10が設定されています。

デフォルト引数はメソッド呼び出し時に値を指定しなかった場合に使われる値です。

ここではbに値を渡さなかった場合、自動的に10が代入されます。

計算結果の出力

puts "計算結果: #{a + b}"

この行ではputsを使って計算結果を出力しています。

#{a + b}は「式展開」と呼ばれるもので、a + bの計算結果が文字列内に埋め込まれて表示されます。

例えばaが15でbが10であれば「計算結果: 25」が出力されます。

メソッドaddの呼び出し(1回目)

add(a: 15)

この行でaddメソッドを呼び出しています。

ここではキーワード引数としてaに15を指定し、bは省略しています。bを省略すると、デフォルト引数である10が使われます。

そのためこの呼び出しではa + b = 15 + 10の計算が行われ、結果として25が出力されます。

メソッドaddの呼び出し(2回目)

add(a: 15, b: 20)

この行でもaddメソッドを呼び出していますが、ここではaに15、bに20を指定しています。

bのデフォルト値は無視されて指定された20が代入されるため、a + b = 15 + 20の計算が行われ、結果として35が出力されます。

まとめ

このコードでは「デフォルト引数」と「キーワード引数」の使い方を学びました。

デフォルト引数を使うと、コードを簡潔にしつつ柔軟な引数の指定が可能になります。またキーワード引数を使うことで、引数の順序や内容をわかりやすく指定できます。

ぜひ他のプログラムにもこの方法を取り入れてみましょう。

<<前のページ

Rubyの記事一覧

次のページ>>

FAQ|Rubyのデフォルト引数とキーワード引数の使い方

Q
Q1. Rubyでデフォルト引数を使う際に注意すべき点はありますか?

はい、デフォルト引数は引数リストの末尾に配置する必要があります。先にデフォルト引数が来ると、引数の対応がずれて予期せぬ動作を引き起こすため注意が必要です。

Q
Q2. キーワード引数を省略可能にするにはどう書けばいいですか?

キーワード引数にデフォルト値を設定することで省略可能になります。たとえばdef greet(name: "ゲスト")のように記述することで、呼び出し側がnameを指定しなくてもエラーにならずに実行できます。

Q
Q3. Rubyのメソッドで通常の引数とキーワード引数を同時に使えますか?

はい、可能です。ただし通常の引数が先に来る必要があります。例:def show_info(id, name: "不明")のように、通常の引数→キーワード引数の順で記述してください。

記事URLをコピーしました