Menu
Coddy logo textTech

カプセル化

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
challenge icon

チャレンジ

ユーザーデータを保護するためにカプセル化を使用したコードが提供されています。あなたのタスクは、年齢にアクセスするための 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 と出力されるはずです

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン