Corso di Raku / Appendice 🆕 / Tipi e macchine per il testo / Oggetti e classi / Exercises / Un conto bancario
Soluzione: Un conto bancario
Ecco una possibile soluzione del compito.
Codice
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;🦋 Trova il programma nel file bank-account.raku.
Output
declined: insufficient funds
70Commenti
has $!balance = 0dichiara l’attributo come privato — con il twigil!non ha alcun accessore generato, quindi l’unico modo di cambiare il saldo è attraverso i metodi che la classe fornisce. Unmethod balancedà al mondo esterno un modo di leggerlo, ma nessun modo di impostarlo.È voluto. Se avessimo scritto
has $.balance, il twigil.aggiungerebbe un accessore pubblico — di sola lettura per impostazione predefinita, ma unis rwdistratto su di esso esporrebbe l’assegnamento diretto come$account.balance = 1_000_000, permettendo a chiunque di muovere denaro senza passare perdepositowithdraw. Tenere privato l’attributo lo esclude per costruzione: il saldo può cambiare solo secondo le regole del conto stesso, come il controllo di copertura inwithdraw.Il secondo prelievo chiede più del saldo, quindi viene rifiutato e il saldo resta a
70.