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éeEntraînez-vous par vous-même : Playground Swift