Récapitulatif - Compte bancaire
Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 21 sur 57.
Défi
MoyenComplétez la classe BankAccount. Son initialiseur pouvant échouer init?(owner:deposit:) refuse un propriétaire vide ou un dépôt initial négatif. balance et transactions sont private(set). deposit(_:) et withdraw(_:) lèvent AccountError.invalidAmount pour les montants inférieurs à 1, et withdraw lève AccountError.insufficient(balance:) lorsque le montant est supérieur au solde ; chaque modification réussie est enregistrée dans transactions sous la forme +50 ou -20. statement() renvoie Ada: 30 (+50, -20) ou Ada: 0 (no transactions).
Le code fourni lit le propriétaire et le dépôt initial (name,amount), puis les commandes d n ou w n. Il affiche cannot open account lorsque l'initialiseur échoue ; sinon, il affiche invalid amount ou insufficient funds (balance 10) pour les commandes ayant échoué, puis l'état du compte.
Votre code doit être placé dans AccountError.swift et BankAccount.swift. main.swift contient le code d'entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
// Code d'entrée/sortie fourni : le laisser tel quel
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")
}
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesMéthodes et selfInitialiseursLes classes sont des référencesRécapitulatif - Carte de bibliothèque4Encapsulation
Contrôle d’accèsLecture seule depuis l’extérieurProtection de l’étatInitialiseurs pouvant échouerRécapitulatif - Compte bancaire7Polymorphisme et génériques
PolymorphismeConversion de typeFonctions génériquesTypes génériquesRécapitulatif - Calculateur de formes2Structures et types valeur
StructuresSémantique de valeurMéthodes mutantesStructure ou classeRécapitulatif - article d’inventaire5Héritage
Sous-classesRedéfinition des méthodesInitialiseurs et superfinal et hiérarchiesRécapitulatif - hiérarchie des employés8Protocoles standard
CustomStringConvertibleEquatableComparableHashableRécapitulatif - Tri personnalisé11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Swift