Zusammenfassung – Sicherer Taschenrechner
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 48 von 56.
Aufgabe
MittelBaue einen winzigen Taschenrechner, der sicher gegen fehlerhafte Eingaben ist.
Definiere CalcError: Error mit den Fällen: parse, divideByZero, unknownOp.
Definiere eine throwing function compute(_ a: String, _ op: String, _ b: String) throws -> Int, die:
aundbals Integer parst und.parsewirft, falls einer von beiden fehlschlägt.unknownOpwirft, wennopnicht eines von+,-,*,/ist.divideByZerowirft, wennop == "/"undb == 0ist- Andernfalls das ganzzahlige Ergebnis zurückgibt
Lies eine einzelne Eingabezeile: eine durch Kommata getrennte Liste von a:op:b Ausdrücken. Verarbeite jeden nacheinander mit einem do/catch. Gib pro Ausdruck eine Zeile aus:
= <n>bei Erfolgparse error,div by zerooderunknown opfür jeden Fehlerfall
Gib nach den zeilenweisen Ausdrücken eine Zusammenfassungszeile aus: OK: <n> mit der Anzahl der erfolgreich verarbeiteten Ausdrücke.
Für die Eingabe 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4 lautet die Ausgabe:
= 8
div by zero
parse error
unknown op
= 8
OK: 2Probier es selbst
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// Schleife, do/try, Ergebnis pro Ausdruck ausgeben; am Ende 'OK: <n>' ausgeben
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken3Dictionaries
Dictionaries deklarierenOptionaler LookupDictionaries aktualisierenÜber Dictionaries iterierenWerte gruppierenZusammenfassung – Inventar6Funktionen höherer Ordnung Teil 2
compactMapflatMapsorted(by:)Pipelines erstellenZusammenfassung – Bestenliste9Fehlerbehandlung
throws und Errordo, try, catchtry? und try!Fehler weitergebenZusammenfassung – Sicherer Taschenrechner