ΤϯςΟςΟΛ͏ʢҰൠతͳΦϒδΣΫτࢦʣ
let account = new Account(“A”, new Balance(200));
console.log(account.balance.amount);
//200
result = account.debit(100);
console.log(result, account.balance.amount);
//“success” 100
Slide 31
Slide 31 text
ΤϯςΟςΟΛ͏ʢҰൠతͳΦϒδΣΫτࢦʣ
let account = new Account(“A”, new Balance(200));
console.log(account.balance.amount);
//200
result = account.debit(100);
console.log(result, account.balance.amount);
//“success” 100
Broken!
Slide 32
Slide 32 text
ΤϯςΟςΟʢؔܕϓϩάϥϛϯάʣ
class Account {
constructor(public id: UserID, public balance: Balance) {
Object.freeze(this);
}
debit(amount: number):Account {
if(this.balance.amount < amount) {
return [“error”, “This is an error message.”];
} else {
return [“success”,
ɹnew Account(this.id, new Balance(this.balance.amount - amount))];
}
}
credit(amount: number):Account {
return [“success”,
new Account(this.id, new Balance(this.balance.amount + amount))];
}
}