まとめ - 安全な計算機
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 47/56。
不正な入力にも耐えられる小さな計算機を、raise、複数の rescue 節、そして ensure を組み合わせて作成しましょう。
チャレンジ
中級以下の動作を行うメソッド calc(a, op, b) を定義してください:
opが+,-,*,/のいずれでもない場合、メッセージ"unknown operator"を持つArgumentErrorを発生させる- それ以外の場合は演算を実行する(
/には整数算術を使用する)
次に、入力から a, op, b の3行を読み込み、begin / rescue / ensure の中で calc を呼び出します:
- 成功した場合は、
<a> <op> <b> = <result>を出力する ArgumentErrorの場合は、Bad operatorを出力するZeroDivisionErrorの場合は、Cannot divide by zeroを出力するensure内では、常に--- end ---を出力する
a と b のパースには同じ begin ブロック内で Integer(...) を使用してください。これにより、整数以外の入力も Bad operator に分類されます(ArgumentError はその両方をカバーします)。
入力が 6 / * / 7 の場合、出力は以下のようになります:
6 * 7 = 42
--- end ---入力が 10 / / / 0 の場合:
Cannot divide by zero
--- end ---自分で試してみよう
# TODO: calc(a, op, b) を定義する。未知の op に対しては ArgumentError を発生させること
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: 説明にある通り begin/rescue/ensure を使用すること