Validando com Require
Parte da seção Lógica e Fluxo do Journey de Kotlin da Coddy. Lição 54 de 63.
require(condition) verifica um contrato de argumento de uma função. Se a condição for false, ele lança IllegalArgumentException. Uma lambda final pode fornecer uma mensagem de erro. Capturar esse erro esperado no chamador permite transformar uma entrada inválida em um resultado definido.
fun ticketCost(count: Int): Int {
require(count >= 0) { "count must be nonnegative" }
return count * 5
}Dentro de main:
try {
println(ticketCost(-2))
} catch (error: IllegalArgumentException) {
println("invalid")
}O requisito de argumento não atendido lança uma exceção antes que o custo seja calculado.
require lança IllegalArgumentException quando sua condição é false.
Desafio
MédioComplete validatedCost com o parâmetro count: Int. Use o auxiliar de custo fornecido, que exige uma contagem não negativa. Retorne o custo como uma string em caso de sucesso, ou invalid se IllegalArgumentException for lançado. count está entre -1000 e 1000.
A menos que limites mais rigorosos sejam definidos acima, as coleções contêm no máximo 100 elementos em cada nível, e os argumentos inteiros e os valores inteiros das coleções estão entre -1000 e 1000. O texto fornecido para análise pode incluir representações inválidas ou fora do intervalo, conforme descrito.
Retorne um valor do tipo String. Mantenha o código de entrada/saída fornecido. Ele lê argumentos escalares, um por linha; uma lista começa com sua contagem seguida de seus elementos, e um mapa começa com a contagem de suas entradas seguida de cada chave e valor. Listas aninhadas repetem o formato de contagem e elementos para cada linha. O main fornecido imprime o valor retornado seguido por uma nova linha. As listas usam o formato padrão entre colchetes do Kotlin; não imprima rótulos adicionais.
Experimente você mesmo
fun cost(count: Int): Int {
require(count >= 0) { "count must be nonnegative" }
return count * 5
}
fun validatedCost(count: Int): String {
// Escreva sua solução aqui.
return ""
}
fun main() {
val count = readln().toInt()
println(validatedCost(count))
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Mapas — Parte 1
Criando mapasConsultas seguras em mapasAtualizando mapasVerificando chavesRecapitulação — Estoque4Coleções Aninhadas
Listas de ListasPercorrendo LinhasResumos das LinhasAchatar Listas AninhadasRecapitulação - Filas de Assentos7Fluxos de Coleções
Transformando com MapFiltrando ValoresTestando Regras de ColeçõesAcumulando com FoldRecapitulação - Totais Aprovados2Mapas — Parte 2
Percorrendo entradas de MapChaves e valoresMapas de frequênciaMapas aninhadosRecapitulação — Relatório de frequência5Projeto - Agenda de Contatos
Salvar ContatosEncontrar Contatos8Ordenação e Agrupamento
Ordenação por uma ChaveCombinando ComparaçõesAgrupando ValoresAssociando por uma ChaveRecapitulação - Classificação por Comprimento11Tratamento de Erros
Analisando sem ExceçõesCapturando Erros EspecíficosTry como ExpressãoValidando com RequireRecapitulação - Quantidades Validadas3Conjuntos e Associação
Criando ConjuntosAtualizando ConjuntosOperações com ConjuntosVerificando SubconjuntosRecapitulação - Convidados do Evento6Valores de Funções
Escrevendo LambdasTipos de FunçãoPassando FunçõesVariáveis CapturadasRecapitulação - Pontuação ConfigurávelPratique por conta própria: Playground de Kotlin