カプセル化
CoddyのJavaScriptジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 17/56。
カプセル化は、クラス内のデータを1つのユニットにまとめるプロセスです。
これは、クラスデータへの直接アクセスに制限を設けるのに役立ち、最終的にはデータの偶発的な変更を防ぐのに役立ちます。
カプセル化の実際の動作を簡単な例で見てみましょう。公開プロパティを持つ基本的なオブジェクトを作成します:
const user = {
name: "John",
email: "john@example.com"
};誰でもこれらのプロパティに直接アクセスして変更できます:
user.name = "Jane"; // 外部から簡単に変更可能
console.log(user.email); // 外部から簡単にアクセス可能よりカプセル化されたアプローチでは、クロージャを使用してデータを隠蔽します:
function createUser(name, email) {
// これらの変数はプライベート(カプセル化)です
let userName = name;
let userEmail = email;
// プライベートデータとやり取りするためのメソッドを持つオブジェクトを返します
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");次に、データを操作するには次のようにします:
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
// データに直接アクセスすることはできません
console.log(encapsulatedUser.userName); // undefinedチャレンジ
ユーザーデータを保護するためにカプセル化を使用したコードが提供されています。あなたのタスクは、年齢にアクセスするための getAge() メソッドを追加することです。
テストは以下を確認します:
getAge()メソッドが存在すること- 正しい年齢を返すこと
- 年齢情報がプライベートのままであること
期待される出力:
john_doe
25
チートシート
カプセル化とは、データをクラス内の1つのユニットにまとめ、そのデータへの直接アクセスを制限することで、予期せぬ変更を防ぐプロセスです。
カプセル化を行わない場合、オブジェクトのプロパティにはパブリックにアクセスできます:
const user = {
name: "John",
email: "john@example.com"
};
user.name = "Jane"; // 直接変更できる
console.log(user.email); // 直接アクセスできるクロージャを使用してデータをカプセル化する例:
function createUser(name, email) {
// プライベート変数(カプセル化されている)
let userName = name;
let userEmail = email;
// プライベートデータとやり取りするための公開メソッド
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined(プライベートデータにはアクセスできない)自分で試してみよう
import { createUser } from './createUser.js';
// テストコード - 変更しないでください
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // "john_doe" と出力されるはずです
console.log(user.getAge()); // 25 と出力されるはずです
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。