Powtórka — bezpieczny kalkulator
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 48 z 56.
Wyzwanie
ŚredniZbuduj mały kalkulator odporny na nieprawidłowe dane wejściowe.
Zdefiniuj CalcError: Error z przypadkami: parse, divideByZero, unknownOp.
Zdefiniuj funkcję compute(_ a: String, _ op: String, _ b: String) throws -> Int zgłaszającą błędy, która:
- Parsuje
aibjako liczby całkowite, zgłaszając.parse, jeśli parsowanie którejkolwiek z nich się nie powiedzie - Zgłasza
.unknownOp, gdyopnie jest jednym z+,-,*,/ - Zgłasza
.divideByZero, gdyop == "/"ib == 0 - W przeciwnym razie zwraca wynik jako liczbę całkowitą
Odczytaj jeden wiersz danych wejściowych: listę wyrażeń a:op:b rozdzielonych przecinkami. Przetwórz je po kolei za pomocą do/catch. Wypisz jeden wiersz dla każdego wyrażenia:
= <n>w przypadku powodzeniaparse error,div by zerolubunknown opdla każdego przypadku błędu
Po wierszach dotyczących poszczególnych wyrażeń wypisz jeden wiersz podsumowania: OK: <n> z liczbą wyrażeń przetworzonych pomyślnie.
Dla danych wejściowych 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4 wynikiem jest:
= 8
div by zero
parse error
unknown op
= 8
OK: 2Spróbuj swoich sił
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// przejdź przez pętlę, użyj do/try, wypisz wynik dla każdego expr; na koniec wypisz 'OK: <n>'
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słów3Słowniki
Deklarowanie słownikówWyszukiwanie opcjonalneAktualizowanie słownikówIterowanie po słownikachGrupowanie wartościPodsumowanie – inwentarz6Funkcje wyższego rzędu, cz. 2
compactMapflatMapsorted(by:)Tworzenie potokówPowtórzenie – tabela wyników9Obsługa błędów
throws i Errordo, try, catchtry? i try!Przekazywanie błędówPowtórka — bezpieczny kalkulatorPoćwicz samodzielnie: Edytor online Swift