Repaso - Calculadora segura
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 48 de 56.
Desafío
IntermedioConstruye una pequeña calculadora que sea segura contra entradas incorrectas.
Define CalcError: Error con los casos: parse, divideByZero, unknownOp.
Define una función que lanza errores compute(_ a: String, _ op: String, _ b: String) throws -> Int que:
- Analice
aybcomo enteros, lanzando.parsesi alguno falla - Lance
.unknownOpcuandoopno sea uno de+,-,*,/ - Lance
.divideByZerocuandoop == "/"yb == 0 - De lo contrario, devuelva el resultado entero
Lee una sola línea de entrada: una lista separada por comas de expresiones a:op:b. Procesa cada una en orden con un bloque do/catch. Imprime una línea por expresión:
= <n>en caso de éxitoparse error,div by zero, ounknown oppara cada caso de error
Después de las líneas por expresión, imprime una línea de resumen: OK: <n> con el recuento de las expresiones que tuvieron éxito.
Para la entrada 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4, la salida es:
= 8
div by zero
parse error
unknown op
= 8
OK: 2Pruébalo tú mismo
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// bucle, do/try, imprimir resultado por expr; finalmente imprimir 'OK: <n>'
Todas las lecciones de Lógica y Flujo
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras3Diccionarios
Declaración de diccionariosBúsqueda opcionalActualización de diccionariosIteración de diccionariosAgrupación de valoresResumen - Inventario6Funciones de orden superior - Parte 2
compactMapflatMapsorted(by:)Construcción de pipelinesRepaso - Tabla de posiciones9Manejo de errores
throws y Errordo, try, catchtry? y try!Propagación de erroresRepaso - Calculadora segura