👀
アクセサ【個人学習まとめ】
アクセサ
アクセサにはゲッターとセッターの2種類のメソッドが存在する。
ゲッター
まずはゲッターのみ。get
キーワードをメソッドの前に宣言して定義する。
class Money {
private _amount: number;
constructor(amount: number) {
this._amount = amount;
}
//ゲッターを定義
get amount(): number {
console.log("金額を取得");
return this._amount;
}
}
const money = new Money(500);
console.log(`${money.amount} 円`);
金額を取得
→500
ゲッターはプロパティにアクセスするようにmoney.amount
記述することで実行される。
セッター
次にセッター。set
キーワードをメソッドの前に宣言して定義する。
class Money {
private _amount: number;
constructor(amount: number) {
this._amount = amount;
}
// ゲッターを定義
get amount(): number {
console.log("金額を取得");
return this._amount;
}
// セッターを定義
+ set amount(value: number) {
+ if (value < 0) {
+ throw new Error("不正な値です")
+ }
+ console.log("金額を設定");
+ this._amount = value;
+ }
}
const money = new Money(500);
console.log(`${money.amount} 円`);
money.amount = 1000;
console.log(`${money.amount} 円`);
ここでは0未満はエラーとしている。
セッターは引数value
を受け取る。もし引数value
に型が指定されていなければゲッターの戻り値から型を判定する。
ゲッターやセッターを使うとプロパティの直接アクセスを制限することや、プロパティのアクセス時に特定の処理を実施させることができる。
余談
セッターに金額を計算する関数を追加。
プロパティの値をセットした直後に、maisu()
が実行される。
こうすることにより、値をセットした後にわざわざmaisu()
を呼び出す手間を省くことができる。
class CountMoney {
private _amount: number;
constructor(amount: number) {
this._amount = amount;
}
// ゲッターを定義
get amount(): number {
console.log("金額を取得");
return this._amount;
}
// セッターを定義
set amount(value: number) {
if (value < 0) {
throw new Error("不正な値です")
}
console.log(`金額を設定 ${value}`);
this._amount = value;
this.maisu(this._amount);
}
private maisu(kingaku: number) {
console.log("お金の枚数を算出");
let tmpMoney = kingaku;
const maisu10000 = Math.floor(tmpMoney / 10000);
tmpMoney = tmpMoney % 10000;
console.log(`1万円: ${maisu10000} 枚`);
const maisu5000 = Math.floor(tmpMoney / 5000);
tmpMoney = tmpMoney % 5000;
console.log(`5千円: ${maisu5000} 枚`);
const maisu1000 = Math.floor(tmpMoney / 1000);
tmpMoney = tmpMoney % 1000;
console.log(`1千円: ${maisu1000} 枚`);
const maisu500 = Math.floor(tmpMoney / 500);
tmpMoney = tmpMoney % 500;
console.log(`500円: ${maisu500} 枚`);
const maisu100 = Math.floor(tmpMoney / 100);
tmpMoney = tmpMoney % 100;
console.log(`100円: ${maisu100} 枚`);
const maisu50 = Math.floor(tmpMoney / 50);
tmpMoney = tmpMoney % 50;
console.log(`50円: ${maisu50} 枚`);
const maisu10 = Math.floor(tmpMoney / 10);
tmpMoney = tmpMoney % 10;
console.log(`10円: ${maisu10} 枚`);
console.log(`1円: ${tmpMoney} 枚`);
}
}
console.log("----");
const payMoney = new CountMoney(0);
payMoney.amount = 27850;
結果
金額を設定 27850
お金の枚数を算出
1万円: 2 枚
5千円: 1 枚
1千円: 2 枚
500円: 1 枚
100円: 3 枚
50円: 1 枚
10円: 0 枚
1円: 0 枚
Discussion