この記事で学べる知識:メソッドの定義と使用
この記事の練習問題を解くために必要な知識:
基礎文法と制御構造(レッスン1~2)、メソッドの定義と呼出し、デフォルト引数とキーワード引数、メソッドの戻り値、真偽値を返すメソッド、エラーメッセージ、例外処理
<<前のページ | Ruby記事一覧 |
次のページ>> |
Rubyの文法「メソッド」とは
ここではメソッドの意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。
Rubyにおいて、メソッドは特定の処理を一つにまとめて再利用できるようにしたコードのブロックです。
メソッドを使うことで同じ処理を何度も書く手間を省き、保守しやすいコードを作ることができます。
本記事ではRubyでのメソッドの定義と呼出しについて、基本的な構文と使い方を学びます。
メソッドとは?
メソッドとはコードの再利用性を高め、同じ処理を何度でも呼び出せる仕組みです。
例えば同じ計算処理を繰り返し使いたい場合にメソッドとして定義しておけば、他の部分でも簡単にその処理を呼び出すことができます。
Rubyではdef
キーワードを使ってメソッドを定義します。
メソッドの定義
メソッドを定義するための基本構文は以下の通りです。
def メソッド名(引数1, 引数2, ...) # 実行したい処理 end
def
キーワードの後にメソッド名を指定します。メソッド名は小文字で始めるのが一般的です。- 必要な引数がある場合は括弧内にカンマで区切って記述します。
- 最後に
end
でメソッドの定義を終了します。
例えば2つの引数を加算するadd
メソッドを定義してみましょう。
def add(a, b) # aとbの二つの引数を持つaddという名のメソッドを定義 puts a + b # このメソッドの処理内容 end
このadd
メソッドは、このあと説明する引数を受け取って、その合計値を出力します。
このようにして定義したメソッドは後から自由に呼び出して使用できます。
メソッドの呼出し
定義したメソッドを実際に使うには、メソッド名と必要な引数を指定して呼び出します。
例えば先ほどのadd
メソッドを呼び出すには次のようにします。
add(10, 20) # addメソッドの呼び出し。30と出力される。
ここでadd(10, 20)
とすることで、引数10と20がa
とb
に渡され、合計値の30が出力されます。
また、引数が不要なメソッドも定義できます。
例えば固定メッセージを表示するgreet
メソッドを作成してみましょう。
def greet # 引数の無いgreetメソッドを定義 puts "Hello, Ruby!" # greetメソッドの処理内容 end greet # grretメソッドの呼び出し。Hello, Ruby!と出力。
このように引数を指定せずにメソッドを呼び出すことも可能です。
メソッドの使用例
もう少し複雑な例として、割り算を行い、割り切れるかどうかを判定するメソッドを作成してみましょう。
このメソッドは引数を2つ受け取り、割り切れる場合は「割り切れる」、そうでない場合は「割り切れない」と出力します。
def divisible?(a, b) # divisible?の定義 if b == 0 # 早期リターン(例外を早めに除外) puts "0では割り算できません" end if a % b == 0 puts "割り切れる" else puts "割り切れない" end end divisible?(10, 2) #=> 割り切れる divisible?(10, 3) #=> 割り切れない divisible?(10, 0) #=> 0では割り算できません
この例では引数a
をb
で割った際に余りが0であれば「割り切れる」、そうでなければ「割り切れない」と表示します。
さらに0で割ることはできないため、b
が0の場合はエラーメッセージを返します。
このコードをメソッドを使わずに書こうとすると、同じコードを何度も繰り返す非常に冗長なコードになることがお判りでしょうか。
メソッドを利用することでコードが短くなり、ミスを減らすことにも繋がります。
まとめ
この図はこれからこの「第3章 メソッドと例外処理編」で学習する内容を視覚的に分かりやすくまとめた概念図です。本記事の内容は一番上のメソッドAに該当します。
メソッドはコードをまとめて再利用するための強力な手段です。
Rubyではdef
キーワードを使ってメソッドを定義し、メソッド名と引数を指定して呼び出します。
メソッドを活用することで同じ処理を何度も書かずに済み、コードの見通しが良くなります。
次回はメソッドのさらに便利な使い方であるデフォルト引数やキーワード引数について学びましょう。
メソッド定義と呼出しの練習問題:電卓を作ろう
簡単な電卓を作成しましょう。
このプログラムでは、加算、減算、乗算、除算の4つの基本的な算術演算を行います。
ユーザーが入力した2つの数値を使用して、それぞれの計算を実行し、結果を画面に表示します。
また計算を続けるかどうかをユーザーに尋ねる機能も実装します。
この問題の要件
以下の要件に従ってコードを完成させてください。
add(a, b)
メソッドを定義し、2つの引数を加算して結果を表示すること。subtract(a, b)
メソッドを定義し、2つの引数を減算して結果を表示すること。multiply(a, b)
メソッドを定義し、2つの引数を乗算して結果を表示すること。divide(a, b)
メソッドを定義し、2つの引数を除算して結果を表示すること。ただし、0で割る場合はエラーメッセージを表示すること。- ユーザーから2つの数値を入力させ、その数値を使って加算、減算、乗算、除算のいずれかを選択して計算を行うこと。
- 計算を続けるかどうかをユーザーに尋ね、
yes
と答えた場合は再度計算を行い、no
と答えた場合はプログラムを終了すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
1つ目の数値を入力してください: 10 2つ目の数値を入力してください: 5 加算は1、減算は2、乗算は3、除算は4を入力してください: 1 結果: 15.0 計算を続けますか? (yes/no) no プログラムを終了します。
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1:メソッドaddの定義
□ 加算結果を出力
2:メソッドsubtractの定義
□ 減算結果を出力
3:メソッドmultiplyの定義
□ 乗算結果を出力
4:メソッドdivideの定義
□ if文にて引数bが0であるかを判定
□ □ 真の場合、「エラー: 0で割ることはできません」と出力
□ □ 偽の場合、除算結果を出力
5:メソッドcontinue?の定義
□ 「計算を続けますか? (yes/no)」と出力
□ ユーザーの入力を受け取り、小文字に変換して変数answerに代入
□ 変数answerが”yes”と等しいかを判定し、結果を返す
6:変数continue_calculationにtrueを代入
7:while文にてcontinue_calculationがtrueである間、以下の処理を繰り返す
□ 「1つ目の数値を入力してください:」と出力
□ ユーザーからの入力をfloat型に変換して変数num1に代入
□ 「2つ目の数値を入力してください:」と出力
□ ユーザーからの入力をfloat型に変換して変数num2に代入
□ 「加算は1、減算は2、乗算は3、除算は4を入力してください:」と出力
□ ユーザーの入力を整数型に変換して変数operationに代入
□ case文にて変数operationの値に応じた処理を実行
□ □ when 1: メソッドaddを呼び出し、num1とnum2の加算結果を表示
□ □ when 2: メソッドsubtractを呼び出し、num1とnum2の減算結果を表示
□ □ when 3: メソッドmultiplyを呼び出し、num1とnum2の乗算結果を表示
□ □ when 4: メソッドdivideを呼び出し、num1とnum2の除算結果を表示
□ □ else: 「無効な操作です」と出力
□ メソッドcontinue?の戻り値を変数continue_calculationに代入
8:「プログラムを終了します。」と出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 加算を行うメソッド =begin 【穴埋め問題1】 ここでaddメソッドを定義し、引数aとbの加算結果を出力するコードを書いてください。 =end # 減算を行うメソッド =begin 【穴埋め問題2】 ここでsubtractメソッドを定義し、引数aとbの減算結果を出力するコードを書いてください。 =end # 乗算を行うメソッド =begin 【穴埋め問題3】 ここでmultiplyメソッドを定義し、引数aとbの乗算結果を出力するコードを書いてください。 =end # 除算を行うメソッド =begin 【穴埋め問題4】 ここでdivideメソッドを定義し、引数bが0でない場合のみ除算を行い、その結果を出力するコードを書いてください。 =end # ユーザーが計算を続けたいかどうかを尋ねるメソッド =begin 【穴埋め問題5】 ここでcontinue?メソッドを定義し、「計算を続けますか?」と尋ね、ユーザーの入力を受け取って結果を返すコードを書いてください。 =end # メインのプログラム continue_calculation = true while continue_calculation # ユーザーから2つの数値を入力として受け取る puts "1つ目の数値を入力してください:" num1 = gets.to_f puts "2つ目の数値を入力してください:" num2 = gets.to_f # ユーザーに操作を選択させる puts "加算は1、減算は2、乗算は3、除算は4を入力してください:" operation = gets.to_i # 選択された操作を実行 case operation when 1 =begin 【穴埋め問題6】 ここでaddメソッドを呼び出し、num1とnum2の加算結果を表示するコードを書いてください。 =end when 2 =begin 【穴埋め問題7】 ここでsubtractメソッドを呼び出し、num1とnum2の減算結果を表示するコードを書いてください。 =end when 3 =begin 【穴埋め問題8】 ここでmultiplyメソッドを呼び出し、num1とnum2の乗算結果を表示するコードを書いてください。 =end when 4 =begin 【穴埋め問題9】 ここでdivideメソッドを呼び出し、num1とnum2の除算結果を表示するコードを書いてください。 =end else puts "無効な操作です" end # ユーザーが計算を続けたいかどうかを確認する continue_calculation = continue? end puts "プログラムを終了します。"
この問題の穴埋めコードは以上です。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
# 加算を行うメソッド def add(a, b) puts "結果: #{a + b}" end # 減算を行うメソッド def subtract(a, b) puts "結果: #{a - b}" end # 乗算を行うメソッド def multiply(a, b) puts "結果: #{a * b}" end # 除算を行うメソッド def divide(a, b) # 0で割ることを防ぐためのチェック if b == 0 puts "エラー: 0で割ることはできません" else puts "結果: #{a / b}" end end # ユーザーが計算を続けたいかどうかを尋ねるメソッド def continue? puts "計算を続けますか? (yes/no)" answer = gets.chomp.downcase answer == "yes" end # メインのプログラム continue_calculation = true while continue_calculation # ユーザーから2つの数値を入力として受け取る puts "1つ目の数値を入力してください:" num1 = gets.to_f puts "2つ目の数値を入力してください:" num2 = gets.to_f # ユーザーに操作を選択させる puts "加算は1、減算は2、乗算は3、除算は4を入力してください:" operation = gets.to_i # 選択された操作を実行 case operation when 1 add(num1, num2) when 2 subtract(num1, num2) when 3 multiply(num1, num2) when 4 divide(num1, num2) else puts "無効な操作です" end # ユーザーが計算を続けたいかどうかを確認する continue_calculation = continue? end puts "プログラムを終了します。"
正解コードの解説
このRubyコードはメソッドの定義と呼び出しを使って四則演算(加算、減算、乗算、除算)を行う簡単な電卓プログラムです。
各部分がどのように機能するかを順番に説明していきます。
メソッドの定義
def add(a, b) puts "結果: #{a + b}" end
ここではadd
というメソッドを定義しています。def
キーワードでメソッドを定義し、add
がメソッド名です。
(a, b)
は引数リストで、このメソッドは2つの数値を受け取ります。puts
でa + b
の結果を画面に表示します。
他のsubtract
(減算)、multiply
(乗算)、divide
(除算)メソッドも同様に定義されています。
条件分岐と例外処理(除算)
def divide(a, b) if b == 0 puts "エラー: 0で割ることはできません" else puts "結果: #{a / b}" end end
divide
メソッドではb
が0でないかを確認するためにif
文を使っています。0で割るとエラーが発生するため、このようにエラーメッセージを表示して対処しています。
else
の部分で通常の除算を行い、その結果を表示します。
初心者にとって、除算では0で割るケースに対応する方法を学ぶのは重要です。
メソッドの呼び出し
add(num1, num2) subtract(num1, num2) multiply(num1, num2) divide(num1, num2)
上記のコードで定義したメソッドをここで呼び出しています。
例えばadd(num1, num2)
は、変数num1
とnum2
を引数としてadd
メソッドに渡し、その結果を表示します。
これによりメソッドがどのように使われるかが理解できます。
ユーザーからの入力とループ
puts "1つ目の数値を入力してください:" num1 = gets.to_f puts "2つ目の数値を入力してください:" num2 = gets.to_f
この部分では、gets
を使ってユーザーからの入力を受け取り、その入力をto_f
メソッドで浮動小数点数に変換しています。
数値を扱う際にはこのように適切なデータ型に変換することが大事です。
ユーザーが計算を続けるかどうかを確認する
def continue? puts "計算を続けますか? (yes/no)" answer = gets.chomp.downcase answer == "yes" end
このcontinue?
メソッドはユーザーが計算を続けるかどうかを尋ねます。
gets
でユーザーの入力を受け取り、chomp
で余分な改行を削除し、downcase
で入力を小文字に変換します。
"yes"
であればtrue
を返し、プログラムは再び計算を続けます。
繰り返し処理(ループ)
while continue_calculation # 計算処理 continue_calculation = continue? end
while
ループを使ってユーザーが「yes」と答えた限り計算を続けます。
この部分ではループの仕組みとユーザーインタラクションを学ぶことができます。
まとめ
このプログラムでは基本的なメソッドの定義と呼び出し、条件分岐、ユーザー入力の扱い方、ループ処理を学ぶことができます。
特にメソッドを定義して再利用することで、同じ処理を繰り返し実行する際に効率的にコードを書く方法を理解できます。
<<前のページ |
Ruby記事一覧 |
次のページ>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。