Revisão - Conta Bancária
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 21 de 57.
Desafio
MédioComplete a classe BankAccount. Seu inicializador failable init?(owner:deposit:) recusa um proprietário vazio ou um depósito inicial negativo. balance e transactions são private(set). deposit(_:) e withdraw(_:) lançam AccountError.invalidAmount para valores menores que 1, e withdraw lança AccountError.insufficient(balance:) quando o valor é maior que o saldo; toda alteração bem-sucedida é registrada em transactions 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) e, em seguida, os comandos d n ou w n. Ele imprime cannot open account quando o inicializador falha; caso contrário, imprime invalid amount ou insufficient funds (balance 10) para comandos com falha e, por fim, o extrato.
Seu código deve ser colocado em AccountError.swift e BankAccount.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let head = input[0].split(separator: ",", omittingEmptySubsequences: false).map(String.init)
if let account = BankAccount(owner: head[0], deposit: Int(head[1])!) {
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ")
let n = Int(p[1])!
do {
if p[0] == "d" { try account.deposit(n) } else { try account.withdraw(n) }
} catch AccountError.insufficient(let balance) {
print("insufficient funds (balance \(balance))")
} catch {
print("invalid amount")
}
}
print(account.statement())
} else {
print("cannot open account")
}
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift