סיכום – חשבון בנק
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 21 מתוך 57.
אתגר
בינוניהשלם את המחלקה BankAccount. הבנאי המאתחל הכושל שלה init?(owner:deposit:) דוחה בעלים ריק או הפקדת פתיחה שלילית. balance ו-transactions מוגדרים כ-private(set). המתודות deposit(_:) ו-withdraw(_:) זורקות את AccountError.invalidAmount עבור סכומים הקטנים מ-1, ו-withdraw זורקת את AccountError.insufficient(balance:) כשהסכום גדול מהיתרה; כל שינוי מוצלח נרשם ב-transactions בתור +50 או -20. statement() מחזירה את Ada: 30 (+50, -20), או את Ada: 0 (no transactions).
הקוד שסופק קורא את שם הבעלים ואת הפקדת הפתיחה (name,amount), ואז פקודות d n או w n. הוא מדפיס את cannot open account כשהבנאי המאתחל נכשל; אחרת הוא מדפיס את invalid amount או insufficient funds (balance 10) עבור פקודות שנכשלו, ולבסוף את הדוח.
יש לכתוב את הקוד שלך בקבצים AccountError.swift ו-BankAccount.swift. הקובץ main.swift מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
// קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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")
}
כל השיעורים ביחידה תכנות מונחה עצמים
תרגלו בעצמכם: Swift אונליין