この記事で学べる知識:デフォルト引数とキーワード引数
この記事の練習問題を解くために必要な知識:
基礎文法と制御構造(レッスン1~2)、メソッドの定義と呼出し、デフォルト引数とキーワード引数、メソッドの戻り値、真偽値を返すメソッド、エラーメッセージ、例外処理
<<前のページ | Ruby記事一覧 |
次のページ>> |
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
メソッドは、name
とage
というキーワード引数を持っています。
メソッド呼び出しの際に引数名を明示するため、コードが直感的に理解しやすくなります。
またキーワード引数を指定しないとエラーになるため、必要な情報が欠けるのを防ぐことができます。
デフォルト引数とキーワード引数の使用例
デフォルト引数とキーワード引数は組み合わせて使用することも可能です。
次の例では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のデフォルト引数とキーワード引数は、メソッドの使い勝手を向上させる便利な機能です。
デフォルト引数により省略可能な引数を設定したり、キーワード引数により引数の位置に依存しない呼び出し方を実現できます。
これらの仕組みを活用して、読みやすく柔軟なコードを作成しましょう。
デフォルト引数とキーワード引数の練習問題
メソッドの引数にデフォルト値を設定する方法を学ぶためのプログラムを作成しましょう。
このプログラムでは2つの引数を受け取り、それらの合計を表示するメソッドを作成します。
一方の引数にはデフォルト値を設定し、もう一方の引数は必須とします。
引数を1つだけ指定した場合にはデフォルト値が使われ、2つ指定した場合は指定した値同士の合計が表示されます。
この問題の要件
以下の要件に従ってコードを完成させてください。
add
という名前のメソッドを定義すること。- メソッド
add
は、キーワード引数a
とb
を持つこと。- 引数
a
にはデフォルト値を設定せず、必ず値を指定すること。 - 引数
b
にはデフォルト値10
を設定すること。
- 引数
- メソッド内で、引数
a
とb
を足し合わせ、計算結果をputs
で出力すること。 - 以下の2通りの呼び出し方法を用意し、それぞれで結果を表示すること。
add(a: 15)
// デフォルト値b: 10
を使用する。add(a: 15, b: 20)
//b
に新しい値を指定する。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
計算結果: 25 計算結果: 35
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:メソッドadd
の定義
□ 引数a
と、デフォルト値が10の引数b
を設定
2:puts
で”計算結果: “とa + b
の計算結果を出力
3:メソッドadd
の呼び出し;キーワード引数a: 15
を指定
4:メソッドadd
の呼び出し;キーワード引数a: 15
とb: 20
を指定
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
def add(a:, b: 10) =begin 【穴埋め問題1】 ここでputsを使って「計算結果:」と、aとbを足した結果を表示するコードを書いてください。 =end end =begin 【穴埋め問題2】 ここでaddメソッドをキーワード引数aのみを指定して呼び出すコードを書いてください。 =end =begin 【穴埋め問題3】 ここでaddメソッドをキーワード引数aとbの両方を指定して呼び出すコードを書いてください。 =end
以上がこの問題の穴埋めコードです。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
def add(a:, b: 10) # 引数aとbを足し合わせて結果を表示する puts "計算結果: #{a + b}" end add(a: 15) add(a: 15, b: 20)
正解コードの解説
今回のRubyコードは「デフォルト引数とキーワード引数」の使い方を学ぶためのものです。
各ブロックごとに解説します。
メソッド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記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。