質問編集履歴

1

解決した旨を追記

2018/08/31 14:11

投稿

Kaguya_2324
Kaguya_2324

スコア9

test CHANGED
File without changes
test CHANGED
@@ -91,3 +91,47 @@
91
91
 
92
92
 
93
93
  長文をお読みいただきありがとうございました。よろしくお願いします。
94
+
95
+
96
+
97
+ # 解決しました!
98
+
99
+ いくつもの回答を参考にさせていただいたので、質問への追記という形で回答の要約と私が取った解決法を共有させていただきます。今回、
100
+
101
+
102
+
103
+ - Rubyでは、例外はそんなに怖がらなくて大丈夫
104
+
105
+ - むしろ、nilを返すほうが何が起こったのかわからなくてまずい
106
+
107
+ - 例外を投げる場合は、プログラムのバグなのかユーザー側の問題なのかわかるようにする (たとえば、例外クラスを作る)
108
+
109
+ - 想定内の入力によって投げられた例外でプログラムが終了するのを避ける。例外をキャッチして、エラーメッセージを出す
110
+
111
+ - 操作をする前に例外が発生することが予見できるなら、先に判別して例外を投げる
112
+
113
+ - (異常な値を返すにせよ例外を投げるにせよ) 妥当性の確認は仕様に従い、穴がないように作る
114
+
115
+
116
+
117
+ というアドバイスをいただきました。
118
+
119
+
120
+
121
+ 今回は期待する入力は数字二個の間に演算子、という仕様を想定していたので、
122
+
123
+
124
+
125
+ - 入力が変なものじゃないかを正規表現で確認する。変なものだったら独自エラークラスを作成して投げる
126
+
127
+ - ゼロ除算が発生するときにはreturn nilを避け、例外を投げる。計算前に、raise ZeroDivisionError if b == 0を行う
128
+
129
+ - 例外を入出力を行っているメソッド (私の場合はトップレベルでした) で捕捉し、種別に合ったエラーメッセージを出す
130
+
131
+
132
+
133
+ といった実装にしようと思います。
134
+
135
+
136
+
137
+ 最後に、回答いただいた皆様にお礼を申し上げて締めさせていただきます。皆様にご回答いただいたおかげで知見がとても広がりました。また機会があればよろしくお願いします。ありがとうございました!