Menu
Coddy logo textTech

カプセル化

CoddyのJavaScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 17/56。

カプセル化とは、クラス内のデータを1つの単位にまとめるプロセスです。

これにより、クラスのデータに直接アクセスすることに制限を設けられ、最終的にはデータが誤って変更されるのを防ぐのに役立ちます。 

簡単な例でencapsulationの動作を見てみましょう。公開プロパティを持つ基本的なobjectを作成します。

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

チャレンジ

user data を保護するためにカプセル化を使用するコードが与えられています。age にアクセスするための getAge() method を追加するのがあなたの課題です。

テストで確認される内容:

  • getAge() method が存在すること
  • correct age を returns すること
  • age info が remains private であること

期待される出力:

john_doe

25

自分で試してみよう

import { createUser } from './createUser.js';

// テストコード - 変更しないでください
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // "john_doe" を出力するはずです
console.log(user.getAge());      // 25 を出力するはずです

quiz icon腕試し

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

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

自分で練習してみよう: JavaScriptオンラインコンパイラ