Menu
Coddy logo textTech

まとめ:安全な電卓

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

challenge icon

チャレンジ

中級

不正な入力に対して安全な、小さな計算機を作成してください。

parsedivideByZerounknownOp のケースを持つ CalcError: Error を定義します。

以下の処理を行う、エラーをスローする関数 compute(_ a: String, _ op: String, _ b: String) throws -> Int を定義してください:

  • ab を整数としてパースし、どちらかが失敗した場合は .parse をスローする
  • op+, -, *, / のいずれでもない場合、.unknownOp をスローする
  • op == "/" かつ b == 0 の場合、.divideByZero をスローする
  • それ以外の場合は、整数の計算結果を返す

1行の入力を読み込みます。これは a:op:b 形式の式をカンマで区切ったリストです。各式を do/catch を使って順番に処理してください。各式に対して1行ずつ出力します:

  • 成功した場合は = <n>
  • 各エラーケースに応じて parse errordiv by zero、または unknown op

各式の出力の後に、成功した式の数を示すサマリーを1行出力します:OK: <n>

入力が 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4 の場合、出力は以下のようになります:

= 8
div by zero
parse error
unknown op
= 8
OK: 2

自分で試してみよう

let exprs = readLine()!.components(separatedBy: ",")

// TODO: enum CalcError; func compute(...) throws -> Int;
// ループ、do/try、式ごとに結果を出力。最後に 'OK: <n>' を出力。

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