この記事で学べる知識:例外処理
この記事の練習問題を解くために必要な知識:
基礎文法と制御構造(レッスン1~2)、メソッドの定義と呼出し、デフォルト引数とキーワード引数、メソッドの戻り値、真偽値を返すメソッド、エラーメッセージ、例外処理
<<前のページ | Ruby記事一覧 |
次のページ>> |
Rubyの「例外処理」とは
ここでは例外処理の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。
プログラムは実行中に予期しないエラーが発生することがあります。
たとえばファイルが存在しない場合にファイルを読み込もうとしたり、ゼロで割ろうとしたときなどです。
このようなエラーに対して、事前に対処する方法を「例外処理」と呼びます。
Rubyでは例外処理を使うことで、エラーが発生してもプログラムが強制終了せず、適切な対応をとることができます。
例外処理の基本構文
Rubyで例外処理を行うにはbegin
〜rescue
構文を使います。
以下が基本的な例外処理の構文です。
begin # エラーが発生する可能性のある処理 rescue # エラーが発生した場合に実行する処理 end
この構文ではbegin
ブロック内にエラーが発生しうる処理を記述し、その下にrescue
ブロックを置きます。
rescue
ブロック内のコードは、エラーが発生した際に実行されます。
これによりプログラムが異常終了せず、指定した方法でエラーに対処することが可能です。
具体的な例
次に具体的な例を見てみましょう。
以下はゼロで割り算を試みる場合の例です。
begin puts "割り算を行います。" result = 10 / 0 # ゼロで割ることでエラーが発生します puts "結果: #{result}" rescue puts "エラーが発生しました:ゼロで割ることはできません。" end
このコードでは10 / 0
によってゼロ除算のエラーが発生しますが、rescue
ブロックが実行され、「エラーが発生しました:ゼロで割ることはできません。」というメッセージが表示されます。
通常であればゼロ除算のエラーでプログラムが停止しますが、例外処理を使うことでエラーに対して適切なメッセージを出し、プログラムを続行させることができます。
例外処理の注意点とまとめ
例外処理は必ずしもすべてのエラーに対して使うべきではありません。
たとえばエラーが発生した場合の挙動をプログラムの設計上重要なポイントとして扱うべき場合や、あえてエラーを発生させることで早期に問題を発見したい場合などもあります。
例外処理を使う場面を見極め、必要な箇所でのみ使うことが重要です。
Rubyの例外処理は非常にシンプルでわかりやすいため、エラー処理が必要な箇所にうまく取り入れて、プログラムの信頼性と安定性を向上させましょう。
例外処理の練習問題:
例外処理を使って、ゼロで割った場合にエラーメッセージを表示する割り算プログラムを作成してください。
ユーザーから2つの数値を入力させ、2つ目の数値がゼロでない場合は割り算を行い、ゼロの場合はエラーメッセージを表示します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- ユーザーに2つの数値を入力させ、それぞれ変数
num1
とnum2
に格納すること。 begin-rescue-end
構文を使用して、ゼロ除算エラーを処理すること。- ゼロで割った場合、
rescue
ブロック内で「ゼロで割ることはできません」というエラーメッセージを表示すること。 - 割り算が成功した場合、計算結果を「
num1
/num2
= 結果」という形式で表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
最初の数値を入力してください: 10 二番目の数値を入力してください: 2 結果:10 / 2 = 5
最初の数値を入力してください: 10 二番目の数値を入力してください: 0 エラー:ゼロで割ることはできません。
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1:puts "最初の数値を入力してください:"
によりメッセージを出力
2:ユーザーの入力を取得し、整数型に変換して変数num1
に代入
3:puts "二番目の数値を入力してください:"
によりメッセージを出力
4:ユーザーの入力を取得し、整数型に変換して変数num2
に代入
5:begin
により例外処理の開始を宣言
□ 変数result
にnum1
をnum2
で割った結果を代入
□ puts
により計算結果を出力
6:rescue ZeroDivisionError
でゼロ除算エラーの発生を検出
□ puts
によりエラーメッセージ「ゼロで割ることはできません。」を出力
7:end
により例外処理の終了
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# ユーザーに最初の数値を入力させる puts "最初の数値を入力してください:" num1 = gets.chomp.to_i # ユーザーに二番目の数値を入力させる puts "二番目の数値を入力してください:" num2 = gets.chomp.to_i =begin 【穴埋め問題1】 ここで例外処理の開始を宣言してください。例外が発生する可能性のある処理を囲むコードを書いてください。 =end # 割り算を行う result = num1 / num2 puts "結果:#{num1} / #{num2} = #{result}" =begin 【穴埋め問題2】 ここでゼロで割った場合の例外を捕捉し、エラーメッセージを表示するコードを書いてください。 =end =end
この問題の穴埋めコードは以上です。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
# ユーザーに最初の数値を入力させる puts "最初の数値を入力してください:" num1 = gets.chomp.to_i # ユーザーに二番目の数値を入力させる puts "二番目の数値を入力してください:" num2 = gets.chomp.to_i begin # 割り算を行う result = num1 / num2 puts "結果:#{num1} / #{num2} = #{result}" rescue ZeroDivisionError # ゼロで割った場合の例外処理 puts "エラー:ゼロで割ることはできません。" end
正解コードの解説
このプログラムではユーザーから2つの数値を入力してもらい、それらを使って割り算を行います。
もし2つ目の数値が0であった場合、通常のプログラムではエラーが発生して終了してしまいますが、このプログラムでは「例外処理」を使ってエラーが発生したときに適切に対処しています。
ユーザーからの入力部分
puts "最初の数値を入力してください:" num1 = gets.chomp.to_i puts "二番目の数値を入力してください:" num2 = gets.chomp.to_i
まずputs
を使ってユーザーに数値を入力してもらいます。gets
で入力を受け取り、chomp
メソッドで改行を取り除きます。
その後to_i
を使って文字列を整数に変換します。このようにして2つの数値をnum1
とnum2
という変数に格納します。
割り算と例外処理部分
begin result = num1 / num2 puts "結果:#{num1} / #{num2} = #{result}" rescue ZeroDivisionError puts "エラー:ゼロで割ることはできません。" end
ここで重要なのがRubyの「例外処理」です。begin-rescue-end
という構文を使って、割り算中にエラーが発生してもプログラムがクラッシュしないようにします。
begin
ブロック: この中には、エラーが発生する可能性のあるコードを書きます。この場合、num1 / num2
という割り算が行われます。num2
が0でない場合は割り算が正常に実行され、その結果がresult
に代入されます。puts
で結果を表示します。rescue
ブロック: もしnum2
が0の場合、ZeroDivisionError
というエラーが発生します。このエラーはrescue
ブロックで捕捉され、「ゼロで割ることはできません」というエラーメッセージを表示します。このようにして、エラーを適切に処理することでプログラムが異常終了することを防ぎます。
まとめ
例外処理はプログラムの動作中に予期せぬエラーが発生した場合でも、プログラム全体がクラッシュするのを防ぐために使われます。
Rubyではbegin-rescue-end
を使って、特定のエラーが発生したときにどのように対処するかを定義できます。
<<前のページ |
Ruby記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。