ゲッターとセッターによるプロパティの管理
メニューを表示するにはスワイプしてください
ゲッターとセッターは、JavaScriptにおいてオブジェクトのプロパティへのアクセスを制御する強力な方法。
ゲッターとセッターとは
JavaScriptでは、ゲッターとセッターはオブジェクトのプロパティへのアクセスを制御するための特別なメソッド。プロパティの取得や変更方法を柔軟に定義でき、オブジェクトの内部状態を保護。
- ゲッター:プロパティの値を取得するためのメソッド;
- セッター:プロパティの値を設定または更新するためのメソッド。
銀行の金庫をイメージ。金庫は貴重品(プライベートプロパティ)を保管し、銀行員(ゲッター/セッター)が管理者の役割。直接金庫にアクセスできず、銀行員がルールやバリデーションに基づいてアイテムの取得や更新を行う。
ゲッターとセッターの定義と利用方法
ゲッターとセッターは、クラス内で get および set キーワードを使って定義。プロパティへアクセスすると自動的にゲッターが呼び出され、プロパティを変更するとセッターが直接プロパティを変更する代わりに呼び出される。
12345678910111213141516171819202122232425262728293031323334class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type
この例では、#typeはプライベートプロパティであり、値を取得するためのゲッター(get type())と、値を変更するためのセッター(set type(newType))を定義しています。セッターにはバリデーションが含まれており、無効な値の設定を防ぎます。これにより、プライベートデータの更新を制御できることが示されています。
ゲッターとセッターの利点
制御されたアクセス
- ゲッターはプロパティの値へのアクセス方法を定義し、値を返す前に処理や操作を行うことが可能;
- セッターはプロパティの更新方法を制御し、プライベートフィールドに代入する前にデータの検証や変換を行うことが可能。
データ保護
- ゲッターとセッターを使用することで、オブジェクトの内部状態を保護し、制御されたインターフェースを通じてのみ操作を許可;
- プライベートプロパティを隠したまま、必要な情報だけを外部コードに公開可能。
柔軟性
ゲッターとセッターを利用することで、外部コードとのインターフェースを変更せずに、プロパティのアクセスや変更時にバリデーションやログ記録などの追加ロジックを組み込むことが可能。
例:パスワード検証付きユーザーアカウント
パスワードが特定のセキュリティ基準を満たす必要があるユーザーアカウントを管理する場面を想定。セッターを使ってパスワードの強度を強制し、ゲッターで表示用にマスクされたパスワードを取得することが可能。
12345678910111213141516171819202122232425262728293031323334class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long
この例では、getterはパスワードの実際の値を隠すためにマスクされたバージョンを返し、setterはパスワードの検証を行い、パスワードが8文字以上であることを保証します。
ゲッターとセッターを使ったバリデーションロジックの例
ここでは、人物の年齢を管理し、その値が妥当な範囲内に収まるようにする別の例を紹介します。
12345678910111213141516171819202122232425262728293031323334class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age
この例は、セッターが年齢を有効な範囲内に保ち、不正なデータが保存されるのを防ぐ方法を示しています。
1. ゲッターを使用する主な目的は何ですか?
2. 次のコードで、console.log(user.password); の出力は何ですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください