Повторение — Безопасный калькулятор
Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 48 из 56.
Задание
СреднеСоздайте крошечный калькулятор, защищенный от некорректного ввода.
Определите CalcError: Error со следующими случаями (cases): parse, divideByZero, unknownOp.
Определите выбрасывающую исключения функцию compute(_ a: String, _ op: String, _ b: String) throws -> Int, которая:
- Парсит
aиbкак целые числа, выбрасывая.parse, если какой-либо из них не удается преобразовать - Выбрасывает
.unknownOp, когдаopне является одним из+,-,*,/ - Выбрасывает
.divideByZero, когдаop == "/"иb == 0 - В противном случае возвращает целочисленный результат
Прочитайте одну строку ввода: список выражений a:op:b, разделенных запятыми. Обработайте каждое по порядку с помощью do/catch. Выводите по одной строке на каждое выражение:
= <n>при успехеparse error,div by zeroилиunknown opдля каждого случая ошибки
После строк для каждого выражения выведите одну итоговую строку: 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>'
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря3Словари
Объявление словарейБезопасный поискОбновление словарейИтерация по словарямГруппировка значенийИтоги — Инвентарь6Функции высшего порядка, часть 2
compactMapflatMapsorted(by:)Создание конвейеровПовторение — Таблица лидеров9Обработка ошибок
throws и Errordo, try, catchtry? и try!Проброс ошибокПовторение — Безопасный калькулятор