Récapitulatif - Calculatrice sécurisée
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 48 sur 56.
Défi
MoyenConstruisez une petite calculatrice sécurisée contre les entrées incorrectes.
Définissez CalcError: Error avec les cas : parse, divideByZero, unknownOp.
Définissez une fonction lançant des erreurs compute(_ a: String, _ op: String, _ b: String) throws -> Int qui :
- Analyse
aetbcomme des entiers, en lançant.parsesi l'un des deux échoue - Lance
.unknownOpquandopn'est pas l'un des opérateurs+,-,*,/ - Lance
.divideByZeroquandop == "/"etb == 0 - Sinon, retourne le résultat entier
Lisez une seule ligne d'entrée : une liste d'expressions a:op:b séparées par des virgules. Traitez chacune dans l'ordre avec un bloc do/catch. Affichez une ligne par expression :
= <n>en cas de succèsparse error,div by zero, ouunknown oppour chaque cas d'erreur
Après les lignes par expression, affichez une ligne de résumé : OK: <n> avec le nombre d'expressions ayant réussi.
Pour l'entrée 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4, la sortie est :
= 8
div by zero
parse error
unknown op
= 8
OK: 2Essayez vous-même
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// boucle, do/try, afficher le résultat par expr ; enfin afficher 'OK: <n>'
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots3Dictionnaires
Déclarer des dictionnairesRecherche optionnelleMettre à jour des dictionnairesParcourir des dictionnairesGrouper des valeursRécapitulatif - Inventaire6Fonctions d'ordre supérieur, partie 2
compactMapflatMapsorted(by:)Construction de pipelinesRécapitulatif - Tableau de classement9Gestion des erreurs
throws et Errordo, try, catchtry? et try!Propagation des erreursRécapitulatif - Calculatrice sécurisée