Menu
Coddy logo textTech

まとめ - 安全な計算機

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 47/56。

不正な入力にも耐えられる小さな計算機を、raise、複数の rescue 節、そして ensure を組み合わせて作成しましょう。

challenge icon

チャレンジ

中級

以下の動作を行うメソッド 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 --- を出力する

ab のパースには同じ 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 を使用すること

ロジックとフローのすべてのレッスン