メソッドに引数を渡そう

学習の目標

本章では、以下の内容を学習します。

  • メソッドの引数の概念と役割を理解する
  • 引数を持つメソッドの定義方法を習得する
  • 引数を使ったメソッドの呼び出し方を学ぶ
  • 引数を活用した実践的なコード例を理解する
  • 引数に変数を使う方法を習得する

はじめに

前回までに、メソッドの定義方法、呼び出し方、そして戻り値について学びました。しかし、これまで見てきたメソッドは、いつも同じ処理を行うだけのシンプルなものでした。

実際のプログラミングでは、状況に応じて異なる処理を行えるメソッドが必要になります。例えば、「山田さん、こんにちは」や「佐藤さん、こんにちは」のように、挨拶する相手によって挨拶の内容を変えたいことがあります。

このような柔軟性を実現するために使用するのが引数です。引数とは、メソッドに渡す情報のことで、この情報を使って処理内容を変化させることができます。

それでは、具体的な例を見ながら引数の使い方を学んでいきましょう。

ファイルの準備

まずは、実習用のファイルを作成しましょう。

エディタで新しいファイルを開き、method_arguments.rbという名前で保存します。これから、このファイルにメソッドを定義していきます。

メソッドの定義

引数を使用するメソッドと使用しないメソッドを1つずつ定義してみましょう。次のコードを入力します。

def greet_simple
puts "こんにちは"
end
def greet_with_name(name)
puts "こんにちは、#{name}さん"
end

ここで定義した2つのメソッドを見てみましょう。

greet_simpleメソッドは引数を持たないため、いつも同じ挨拶「こんにちは」を表示します。

一方、greet_with_nameメソッドはnameという引数を受け取り、その名前を使って「こんにちは、〇〇さん」という挨拶を表示します。

引数は、メソッド名の後ろの丸括弧()の中に書きます。この例では、nameという引数を定義しています。

引数の名前は自由に付けることができますが、その引数が何を表しているのかが分かるような名前を付けるのが良いでしょう。例えば、名前を表す引数ならname、年齢ならageといった具合です。

メソッドを呼び出す

定義したメソッドを呼び出すコードを追加しましょう。

greet_simple
greet_with_name("山田")

プログラムが書けたら、ターミナルでruby method_arguments.rbというコマンドを実行してみましょう。以下のような結果が表示されるはずです。

こんにちは
こんにちは、山田さん

greet_simpleは引数を取らないので、メソッド名だけで呼び出します。一方、greet_with_nameは引数を取るので、丸括弧の中に値(この場合は"山田"という文字列)を渡しています。

これにより、greet_with_nameメソッド内のname変数には"山田"という値が代入され、"こんにちは、山田さん"という文字列が表示されます。

引数を取るメソッドの仕組み

引数を取るメソッドがどのように動作するのか、もう少し詳しく見てみましょう。

  1. メソッドを定義するとき:def greet_with_name(name)で、nameという「引数変数」を定義します
  2. メソッドを呼び出すとき:greet_with_name("山田")で、"山田"という値を引数として渡します
  3. 実行時:メソッド内のname変数に、渡された"山田"という値が自動的に代入されます
  4. 処理:name変数の値を使って"こんにちは、山田さん"という文字列を作り、表示します

このように、引数を使うことで、メソッドの外からメソッドの中へと情報を渡すことができます。これにより、同じメソッドでも与える引数によって異なる動作をさせることが可能になります。

実践的な例

もう少し実用的な例を見てみましょう。method_arguments.rbに、数値を2倍にするメソッドを追加します。

def double(number)
number * 2
end
puts double(5) # 10が表示される
puts double(10) # 20が表示される
puts double(100) # 200が表示される

このメソッドは引数numberを2倍にした値を返します。メソッドの呼び出し時に渡した値(5、10、100)が、それぞれ2倍になって戻り値として返されています。

このように、引数として受け取った値を加工して戻り値として返したり、引数の値に基づいて条件分岐したりといった使い方が一般的です。

引数を複数の場所で使う

引数として受け取った値は、メソッド内の複数の場所で使うこともできます。例えば、商品の価格から税込み価格を計算するメソッドを考えてみましょう。

def calc_tax_included_price(price)
tax_rate = 0.1 # 消費税率10%
tax = price * tax_rate
tax_included_price = price + tax
puts "商品価格: #{price}円"
puts "消費税: #{tax}円"
puts "税込価格: #{tax_included_price}円"
return tax_included_price # 税込価格を戻り値として返す
end
calc_tax_included_price(1000)

このメソッドでは、引数priceを受け取り、それを使って消費税額と税込価格を計算しています。また、これらの値を表示した後、税込価格を戻り値として返しています。

このコードを実行すると、以下のような結果が表示されます。

商品価格: 1000円
消費税: 100円
税込価格: 1100円

このように、引数は計算の基になる値として使用したり、表示内容を変えるために使用したりできます。

変数の使い方

引数には、直接値を書くだけでなく、変数の値を渡すこともできます。例を追加してみましょう。

price = 500
puts "元の価格: #{price}円"
puts "2倍の価格: #{double(price)}円"

ここでは、変数priceに代入された500という値が、doubleメソッドの引数として渡されています。

プログラムが書けたら、もう一度ruby method_arguments.rbを実行してみましょう。以下のような結果が表示されるはずです。

元の価格: 500円
2倍の価格: 1000円

変数の値を引数として渡すことで、プログラム内の別の場所で計算・設定された値をメソッドに渡すことができます。これにより、プログラムの柔軟性が高まります。

変数名と引数名は関係ない

引数に変数を使う際の注意点として、変数名と引数名は関係ないということを覚えておきましょう。以下の例で確認してみます。

def show_info(item)
puts "商品: #{item}"
end
product = "ノートパソコン"
show_info(product)

このコードでは、引数名はitem、変数名はproductと異なりますが、問題なく動作します。大切なのは値の受け渡しであり、名前の一致は必要ありません。

メソッドを呼び出すとき、変数productの値である"ノートパソコン"が、メソッド内の引数変数itemに代入されます。

実用的なシナリオ:フォーマット変換

引数を使った実用的なシナリオとして、日付のフォーマット変換を行うメソッドを考えてみましょう。

def format_date(year, month, day)
"#{year}年#{month}月#{day}日"
end
# 関数の利用例
today = format_date(2023, 9, 15)
puts "今日は#{today}です"
birthday = format_date(1990, 5, 20)
puts "誕生日は#{birthday}です"

このメソッドは、年、月、日の3つの引数を受け取り、「YYYY年MM月DD日」というフォーマットの文字列を返します。このようなメソッドを使うことで、日付の表示形式を統一することができます。

まとめ

本章では、メソッドの引数について学習しました。以下の内容をマスターできたことと思います。

  • 引数を使用することで、メソッドに情報を渡し、その情報を使った処理を行うことができる
  • 引数はメソッド名の後ろの丸括弧の中に定義する
  • メソッドを呼び出すときは、丸括弧の中に値を渡す
  • 引数として、直接値を書くことも、変数の値を渡すこともできる
  • 引数を使うことで、同じメソッドでも異なる動作をさせることができる

引数は、メソッドをより柔軟で再利用可能にするための重要な概念です。さまざまな状況に対応できるメソッドを作るためには、引数の使い方をマスターすることが不可欠です。

次の章では、複数の引数を扱うメソッドについて学んでいきましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
メソッドが返す戻り値を理解しよう