JavaScriptのクラスフィールド

JavaScriptのクラスフィールド

本記事では、JavaScriptにおけるクラスフィールドについて詳しく解説します。クラスフィールドの基本的な構文や使用例、プライベートフィールドの仕組みまでを学びます。

クラスフィールドとは

クラスフィールドとは、JavaScriptのクラス構文で定義されるプロパティのことです。従来のクラスでは、プロパティをコンストラクタ内で初期化する必要がありましたが、クラスフィールドを使うことで、クラス定義の外にプロパティを簡潔に記述できます。

クラスフィールドは主に以下の特徴を持ちます:

  • フィールドをクラススコープ内で定義可能
  • パブリックフィールドとプライベートフィールドをサポート
  • 初期化コードを簡潔に記述可能

構文と基本的な例

クラスフィールドの基本的な構文は以下の通りです:

class クラス名 {
  フィールド名 = 初期値;
}

例として、以下のコードを見てみましょう:

class Person {
  name = "匿名";
  age = 0;

  introduce() {
    return `名前: ${this.name}, 年齢: ${this.age}`;
  }
}

const person = new Person();
console.log(person.introduce()); // 名前: 匿名, 年齢: 0

パブリックフィールド

パブリックフィールドは、クラス外部からアクセス可能なフィールドです。特にキーワードを指定する必要はなく、クラスフィールドを単に定義するだけでパブリックになります。

以下はその例です:

class Car {
  brand = "Toyota";
  model = "Corolla";

  details() {
    return `ブランド: ${this.brand}, モデル: ${this.model}`;
  }
}

const car = new Car();
console.log(car.details()); // ブランド: Toyota, モデル: Corolla
car.brand = "Honda";
console.log(car.details()); // ブランド: Honda, モデル: Corolla

プライベートフィールド

プライベートフィールドは、クラス外部から直接アクセスできないフィールドです。定義する際に先頭に「#」を付けます。

以下はその例です:

class BankAccount {
  #balance = 0;

  deposit(amount) {
    if (amount > 0) {
      this.#balance += amount;
    }
  }

  getBalance() {
    return this.#balance;
  }
}

const account = new BankAccount();
account.deposit(100);
console.log(account.getBalance()); // 100
console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class

この例では、#balanceフィールドがプライベートであるため、外部から直接アクセスするとエラーになります。

使用例とユースケース

クラスフィールドはさまざまなユースケースで役立ちます。たとえば、デフォルト値を設定したり、内部状態をカプセル化したりするのに便利です。

以下の例では、ユーザー情報を管理するクラスを示します:

class User {
  name = "未設定";
  #password = "";

  setPassword(newPassword) {
    if (newPassword.length >= 8) {
      this.#password = newPassword;
    }
  }

  authenticate(password) {
    return this.#password === password;
  }
}

const user = new User();
user.setPassword("securePass");
console.log(user.authenticate("securePass")); // true

数学的表現との対応

クラスフィールドを数学的に表現すると、ある関数 \( f(x) \) の定義域 \( x \) に対応する変数や定数と見なせます。

例えば、以下のコード:

class Circle {
  radius = 1;

  area() {
    return Math.PI * this.radius ** 2;
  }
}

この場合、radiusは円の半径に相当し、面積は以下の式で表されます:

\[ A = \pi r^2 \]

クラスのフィールドとして定義することで、この数学的なモデルをコードとして直感的に表現できます。

以上で、JavaScriptのクラスフィールドについての解説を終わります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です