Repaso - Tarjeta de biblioteca
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 6 de 57.
Desafío
IntermedioDeclara la clase LibraryCard(val name: String, val limit: Int = 3). Su bloque init requiere un nombre no vacío (name is empty) y un límite de al menos 1 (limit must be positive). Mantiene una lista de títulos prestados. borrow(title) devuelve true y añade el título, a menos que la tarjeta haya alcanzado su límite o ya lo tenga. giveBack(title) devuelve true cuando elimina el título. status() devuelve Ada: 2/3 (Dune, Emma) en el orden de préstamo, o Ada: 0/3 cuando no hay nada prestado.
El código proporcionado lee el nombre, el límite (o una línea vacía para usar el valor predeterminado) y después los comandos +title o -title. Imprime ok o no para cada comando y finalmente status(); si la tarjeta no es válida, imprime el mensaje de error en su lugar.
Tu código va en LibraryCard.kt. Main.kt contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: déjalo tal 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 las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesConstructores primariosBloques init y validaciónConstructores secundariosRepaso - Tarjeta de biblioteca4Herencia
Clases abiertas y subclasesSobrescritura de miembrossuper y constructoresClases abstractasRepaso: directorio del personal2Propiedades y encapsulación
Accesores personalizadosModificadores de visibilidadSetters privadoslazy y lateinitRepaso: cuenta bancaria5Interfaces
Declaración de interfacesMétodos predeterminadosInterfaces múltiplesInterfaces como tiposRepaso: métodos de pago8Genéricos
Funciones genéricasClases genéricasRestricciones de tiposVariancia con in y outRepaso - Cola de prioridad11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Kotlin