Menu
CoddyTech

Rangkuman: Rekening Bank

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 21 dari 57.

challenge icon

Tantangan

Sedang

Lengkapi class BankAccount. Initializer failable-nya init?(owner:deposit:) menolak owner yang kosong atau deposit awal yang negatif. balance dan transactions menggunakan private(set). deposit(_:) dan withdraw(_:) melempar AccountError.invalidAmount untuk jumlah di bawah 1, dan withdraw melempar AccountError.insufficient(balance:) ketika jumlahnya lebih besar daripada saldo; setiap perubahan yang berhasil dicatat di transactions sebagai +50 atau -20. statement() mengembalikan Ada: 30 (+50, -20), atau Ada: 0 (no transactions).

Kode yang disediakan membaca owner dan deposit awal (name,amount), lalu perintah d n atau w n. Kode mencetak cannot open account jika initializer gagal; jika tidak, kode mencetak invalid amount atau insufficient funds (balance 10) untuk perintah yang gagal, lalu mencetak statement.

Tuliskan kodemu di AccountError.swift dan BankAccount.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output yang disediakan: biarkan apa adanya
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")
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift