Raku-Kurs / Anhang 🆕 / Typen und Textmaschinen / Objekte und Klassen / Exercises / Ein Bankkonto
Lösung: Ein Bankkonto
Hier ist eine mögliche Lösung der Aufgabe.
Code
class Account {
has $!balance = 0;
method deposit($amount) {
$!balance += $amount;
}
method withdraw($amount) {
if $amount > $!balance {
say 'declined: insufficient funds';
}
else {
$!balance -= $amount;
}
}
method balance { $!balance }
}
my $account = Account.new;
$account.deposit(100);
$account.withdraw(30);
$account.withdraw(200);
say $account.balance;🦋 Du findest den Quellcode in der Datei bank-account.raku.
Ausgabe
declined: insufficient funds
70Kommentare
has $!balance = 0erklärt das Attribut als privat — mit dem Twigil!hat es überhaupt keinen erzeugten Zugriffsweg, der einzige Weg, den Kontostand zu ändern, führt also über die Methoden, welche die Klasse bereitstellt. Einemethod balancegibt der Außenwelt eine Möglichkeit, ihn zu lesen, aber keine, ihn zu setzen.Das ist Absicht. Hätten wir
has $.balancegeschrieben, fügte der Twigil.einen öffentlichen Zugriffsweg hinzu — standardmäßig nur lesend, doch ein unbedachtesis rwdaran gäbe die unmittelbare Zuweisung wie$account.balance = 1_000_000frei und ließe jeden Geld bewegen, ohne überdepositoderwithdrawzu gehen. Das Attribut privat zu halten schließt das bauartbedingt aus: Der Kontostand kann sich immer nur nach den eigenen Regeln des Kontos ändern, etwa nach der Deckungsprüfung inwithdraw.Die zweite Abhebung verlangt mehr als den Kontostand, sie wird also abgelehnt, und der Kontostand bleibt bei
70.