JavaScriptでのクラス定義(class)

JavaScriptでのクラス定義(class)

JavaScriptのクラス(class)は、ES6(ECMAScript 2015)で導入された構文であり、オブジェクト指向プログラミングをより簡潔に記述する手段を提供します。クラスはプロトタイプベースのオブジェクト指向の上に構築されており、内部的にはプロトタイプチェーンを使用します。このページでは、クラスの構文や関連概念を例とともに詳しく解説します。

クラスの基本的な定義

クラスを定義するには、classキーワードを使用します。以下はシンプルなクラス定義の例です。

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    introduce() {
        console.log(`私の名前は${this.name}で、${this.age}歳です。`);
    }
}

// クラスのインスタンス化
const person1 = new Person('太郎', 30);
person1.introduce(); // "私の名前は太郎で、30歳です。" と出力

このコードでは、constructorメソッドがクラスの初期化処理を定義しています。newキーワードを使ってクラスのインスタンスを作成できます。

メソッドとプロパティ

クラスの中では、インスタンスメソッドや静的メソッドを定義できます。また、クラスプロパティもサポートされています。

インスタンスメソッド

以下の例では、インスタンスごとに使用できるメソッドを定義しています。

class Calculator {
    add(a, b) {
        return a + b;
    }

    multiply(a, b) {
        return a * b;
    }
}

const calc = new Calculator();
console.log(calc.add(2, 3)); // 5
console.log(calc.multiply(4, 5)); // 20

静的メソッド

staticキーワードを使うと、クラス自体に属するメソッドを定義できます。

class MathUtils {
    static square(x) {
        return x * x;
    }

    static cube(x) {
        return x * x * x;
    }
}

console.log(MathUtils.square(3)); // 9
console.log(MathUtils.cube(2));   // 8

クラスプロパティ

ES2022では、クラスプロパティの定義がサポートされました。

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

    introduce() {
        console.log(`私の名前は${this.name}で、${this.age}歳です。`);
    }
}

const person = new Person();
console.log(person.name); // "匿名"
console.log(person.age);  // 0

継承

JavaScriptでは、extendsキーワードを使用してクラスを継承できます。superキーワードを使うことで、親クラスのコンストラクタやメソッドを呼び出すことができます。

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name}が鳴いています。`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name}が吠えています。`);
    }
}

const dog = new Dog('ポチ');
dog.speak(); // "ポチが吠えています。" と出力

数学的な例との対応

JavaScriptのクラスを使うと、数学的な概念をプログラムで表現することが容易になります。例えば、多項式をクラスで表現する例を示します。

class Polynomial {
    constructor(coefficients) {
        this.coefficients = coefficients; // 係数の配列
    }

    evaluate(x) {
        return this.coefficients.reduce((sum, coeff, index) => sum + coeff * Math.pow(x, index), 0);
    }
}

const poly = new Polynomial([1, 0, -2, 1]); // 1 - 2x^2 + x^3
console.log(poly.evaluate(2)); // f(2) = 1 - 2(2^2) + (2^3) = 1

この場合、次の多項式 \( f(x) = 1 – 2x^2 + x^3 \) を評価しています。

\[ f(x) = \sum_{i=0}^n a_i x^i \]

プライベートフィールドとメソッド

プライベートフィールドは、#記号を使用して定義されます。これにより、クラスの外部からアクセスできないデータを管理できます。

class Counter {
    #count = 0;

    increment() {
        this.#count++;
    }

    getCount() {
        return this.#count;
    }
}

const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 1
// console.log(counter.#count); // エラー: プライベートフィールドにはアクセスできません

まとめ

JavaScriptのクラスは、オブジェクト指向プログラミングの便利な構文を提供します。クラスを使用することで、コードの可読性と再利用性を向上させることができます。また、継承やプライベートフィールドといった機能を活用することで、複雑なアプリケーションの構築も可能です。

このページでは、基本的なクラス定義から継承、数学的な応用まで幅広く解説しました。JavaScriptを使った開発に役立ててください。

コメントを残す

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