privateの概要
| アクセス制御(プライベートメンバー) JavaScript予約語 | ||
|
private 概要 わかりやすく説明 |
||
|
privateの基本的な使い方
以下は、#を使用したプライベートメンバーの基本例です。
// プライベートフィールドの例
class User {
#name; // プライベートプロパティ
constructor(name) {
this.#name = name; // クラス内でのみアクセス可能
}
getName() {
return this.#name; // プライベートプロパティへのアクセス
}
setName(newName) {
this.#name = newName; // プライベートプロパティを更新
}
}
const user = new User("Alice");
console.log(user.getName()); // Alice
user.setName("Bob");
console.log(user.getName()); // Bob
console.log(user.#name); // エラー: プライベートフィールドにはアクセスできません
- プライベートフィールドは
#を使って定義します。 - プライベートプロパティへのアクセスはクラス内部のメソッドを通じて行います。
- 外部からの直接アクセスは防止されます。
privateの応用例
プライベートメンバーを利用すると、データの隠蔽と安全な操作が可能になります。
// プライベートフィールドを使ったバンクアカウント
class BankAccount {
#balance; // プライベートプロパティ
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
if (amount > 0) {
this.#balance += amount;
console.log(`入金: ${amount}円`);
} else {
console.log("無効な入金額です。");
}
}
withdraw(amount) {
if (amount > 0 && amount <= this.#balance) {
this.#balance -= amount;
console.log(`出金: ${amount}円`);
} else {
console.log("無効な出金額です。");
}
}
getBalance() {
return `現在の残高: ${this.#balance}円`;
}
}
const account = new BankAccount(1000);
console.log(account.getBalance()); // 現在の残高: 1000円
account.deposit(500);
account.withdraw(300);
console.log(account.getBalance()); // 現在の残高: 1200円
console.log(account.#balance); // エラー: プライベートフィールドにはアクセスできません
- プライベートフィールドを使うことで、不正な操作を防ぎつつ、安全な方法でデータを操作できます。
- 外部からの直接アクセスを防ぐことで、予期しない動作やエラーのリスクを減らします。
注意点
- プライベートフィールドの記法: プライベートフィールドには
#を使用します。他の記法(例: アンダースコア_)は慣習的なものに過ぎません。 - 継承時の制約: プライベートフィールドは継承されたクラスからもアクセスできません。アクセスを許可する場合は、
protectedのような動作を模倣する必要があります。 - ブラウザサポート: 一部の古いブラウザではプライベートフィールドがサポートされていない場合があります。
よくある質問
- Q: なぜ
#記法が必要なのですか? - A:
#記法は、プライベートフィールドをJavaScriptエンジンレベルで隠蔽するために必要です。#を使わない場合、外部からのアクセス制御が完全には保証されません。 - Q: プライベートフィールドは継承クラスでアクセスできますか?
- A: いいえ、プライベートフィールドは継承クラスからもアクセスできません。共有が必要な場合、親クラスにアクセサーメソッドを定義する必要があります。
- Q: プライベートメンバーをエクスポートすることは可能ですか?
- A: プライベートフィールドそのものを直接エクスポートすることはできませんが、クラスメソッドを介して値を取得する設計が一般的です。
まとめ
privateは、クラス内でのみアクセス可能なメンバーを定義するためのキーワードです。JavaScriptでは#記法を用いてプライベートフィールドを実現します。
- プライベートフィールドを使用することで、データの隠蔽と安全な操作が可能です。
- 継承クラスからのアクセスを制限することで、意図しない変更を防ぎます。
- アクセサーメソッドを通じて必要な情報のみを外部に公開する設計が推奨されます。