Recapitulação - Cartão da Biblioteca
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 6 de 57.
Desafio
MédioDeclare a classe LibraryCard(val name: String, val limit: Int = 3). Seu bloco init exige um nome não vazio (name is empty) e um limite de pelo menos 1 (limit must be positive). Ela mantém uma lista dos títulos emprestados. borrow(title) retorna true e adiciona o título, a menos que o cartão esteja no limite ou já o contenha. giveBack(title) retorna true quando removeu o título. status() retorna Ada: 2/3 (Dune, Emma) na ordem dos empréstimos, ou Ada: 0/3 quando nada foi emprestado.
O código fornecido lê o nome, o limite (ou uma linha vazia para usar o padrão) e, em seguida, os comandos +title ou -title. Ele imprime ok ou no para cada comando e, por fim, status(); para um cartão inválido, imprime a mensagem de erro.
Seu código deve estar em LibraryCard.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
fun main() {
// Código de entrada/saída fornecido: mantenha-o como está
val input = generateSequence(::readLine).toList()
try {
val card = if (input[1].isEmpty()) LibraryCard(input[0]) else LibraryCard(input[0], input[1].toInt())
for (cmd in input.drop(2)) {
val title = cmd.drop(1)
val done = if (cmd.startsWith("+")) card.borrow(title) else card.giveBack(title)
println(if (done) "ok" else "no")
}
println(card.status())
} catch (e: IllegalArgumentException) {
println(e.message)
}
}
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesConstrutores PrimáriosBlocos init e ValidaçãoConstrutores SecundáriosRecapitulação - Cartão da Biblioteca4Herança
Classes Abertas e SubclassesSobrescrevendo Membrossuper e ConstrutoresClasses AbstratasRevisão - Diretório de Funcionários2Propriedades e Encapsulamento
Acessores PersonalizadosModificadores de VisibilidadeSetters Privadoslazy e lateinitRevisão - Conta Bancária5Interfaces
Declarando InterfacesMétodos PadrãoMúltiplas InterfacesInterfaces como TiposRecapitulação - Métodos de Pagamento8Genéricos
Funções genéricasClasses genéricasRestrições de tipoVariância com in e outRecapitulação - Fila de prioridade11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Kotlin