Recapitulação - Calculadora Segura
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 48 de 56.
Desafio
MédioConstrua uma pequena calculadora que seja segura contra entradas inválidas.
Defina CalcError: Error com os casos: parse, divideByZero, unknownOp.
Defina uma função que lança erros compute(_ a: String, _ op: String, _ b: String) throws -> Int que:
- Analisa
aebcomo inteiros, lançando.parsese algum deles falhar - Lança
.unknownOpquandoopnão for um de+,-,*,/ - Lança
.divideByZeroquandoop == "/"eb == 0 - Caso contrário, retorna o resultado inteiro
Leia uma única linha de entrada: uma lista separada por vírgulas de expressões a:op:b. Processe cada uma em ordem com um do/catch. Imprima uma linha por expressão:
= <n>em caso de sucessoparse error,div by zero, ouunknown oppara cada caso de erro
Após as linhas por expressão, imprima uma linha de resumo: OK: <n> com a contagem de expressões que tiveram sucesso.
Para a entrada 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4, a saída é:
= 8
div by zero
parse error
unknown op
= 8
OK: 2Experimente você mesmo
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// loop, do/try, imprimir resultado por expr; finalmente imprimir 'OK: <n>'
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Contagem e ÍndicesCase e TrimBusca em StringsDivisão e JunçãoSubstituindo SubstringsRecapitulação - Verificação de Nome de Usuário4Conjuntos
Criando ConjuntosUnião e InterseçãoSubtração e Diferença SimétricaSubconjunto e SuperconjuntoRecapitulação - Filtro de Tags7Projeto - Monitor de Hábitos
Visão Geral do ProjetoMarcar como Concluído10Projeto - Mecanismo de Quiz
Visão Geral do ProjetoFazer Perguntas2Intervalos e Strides
Fechado vs Meio-AbertoStrideMétodos de IntervaloIntervalos no SwitchRecapitulação - Grade de Calendário5Funções de Ordem Superior Parte 1
MapFilterReduceEncadeando map, filter, reduceRecapitulação - Estatísticas de Palavras3Dicionários
Declarando DicionáriosBusca OpcionalAtualizando DicionáriosIterando DicionáriosAgrupando ValoresRecapitulação - Inventário6Funções de Ordem Superior Parte 2
compactMapflatMapsorted(by:)Construindo PipelinesRecapitulação - Leaderboard9Tratamento de Erros
throws e Errordo, try, catchtry? e try!Propagando ErrosRecapitulação - Calculadora Segura