Revisão - Conta Bancária
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 11 de 57.
Desafio
MédioComplete a classe BankAccount(val owner: String, opening: Int). Seu bloco init exige um proprietário não vazio (owner is empty) e um depósito inicial não negativo (opening must not be negative). balance tem um setter privado. As transações são mantidas em uma MutableList privada e expostas como val transactions: List<String>. deposit(amount) e withdraw(amount) retornam true em caso de sucesso: valores menores que 1 são recusados, e uma retirada maior que o saldo é recusada; alterações bem-sucedidas são registradas como +50 ou -20. statement() retorna Ada: 30 (+50, -20) ou Ada: 0 (no transactions).
O código fornecido lê o proprietário e o depósito inicial (name,amount), depois os comandos d n ou w n. Ele imprime refused para comandos malsucedidos e, por fim, o extrato; uma conta inválida imprime a mensagem de erro.
Seu código deve ser colocado em BankAccount.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 (name, amount) = input[0].split(",")
val account = BankAccount(name, amount.toInt())
for (cmd in input.drop(1)) {
val (op, n) = cmd.split(" ")
val ok = if (op == "d") account.deposit(n.toInt()) else account.withdraw(n.toInt())
if (!ok) println("refused")
}
println(account.statement())
} 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