Riepilogo - Conto bancario
Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 21 di 57.
Sfida
MedioCompleta la classe BankAccount. Il suo inizializzatore fallibile init?(owner:deposit:) rifiuta un proprietario vuoto o un deposito iniziale negativo. balance e transactions sono private(set). deposit(_:) e withdraw(_:) generano AccountError.invalidAmount per importi inferiori a 1, mentre withdraw genera AccountError.insufficient(balance:) quando l’importo è maggiore del saldo; ogni modifica riuscita viene registrata in transactions come +50 o -20. statement() restituisce Ada: 30 (+50, -20) oppure Ada: 0 (no transactions).
Il codice fornito legge il proprietario e il deposito iniziale (name,amount), poi i comandi d n o w n. Stampa cannot open account se l’inizializzatore fallisce; altrimenti stampa invalid amount o insufficient funds (balance 10) per i comandi non riusciti e infine il rendiconto.
Il tuo codice va in AccountError.swift e BankAccount.swift. main.swift contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
// Supplied input/output code: keep it as it is
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")
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiMetodi e selfInizializzatoriLe classi sono riferimentiRiepilogo - Tessera della biblioteca4Incapsulamento
Controllo degli accessiSola lettura dall’esternoProteggere lo statoInizializzatori che possono fallireRiepilogo - Conto bancario7Polimorfismo e tipi generici
PolimorfismoCasting dei tipiFunzioni genericheTipi genericiRipasso - Calcolatore di forme2Struct e tipi valore
Le structSemantica dei valoriMetodi mutantiStruct o classeRiepilogo - Articolo di inventario5Ereditarietà
SottoclassiSovrascrivere i metodiInizializzatori e superfinal e gerarchieRiepilogo - Gerarchia dei dipendenti8Protocolli standard
CustomStringConvertibleEquatableComparableHashableRiepilogo - Ordinamento personalizzato11Progetto: Gestione della biblioteca
Libri e utentiPrestito dei libriEsercitati da solo: Playground Swift