静的メソッドの利用 | 静的メソッドとプロパティ | JavaScript 超完全入門 基本から発展までのすべて

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

静的メソッドとは?

JavaScriptのクラスには、静的メソッドという特別なメソッドを定義できます。静的メソッドは、インスタンス化されたオブジェクトではなく、クラス自体に属するメソッドです。クラスをインスタンス化せずに、クラスそのものから呼び出すことができるため、共通のユーティリティ機能を提供するのに非常に便利です。

静的メソッドの定義

静的メソッドは、staticキーワードを使って定義されます。通常、インスタンスごとに異なる動作を提供するインスタンスメソッドとは異なり、静的メソッドはすべてのインスタンスで共通の機能を持ちます。

静的メソッドの定義と利用例

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

    static subtract(a, b) {
        return a - b;
    }
}

console.log(Calculator.add(10, 5));       // 15
console.log(Calculator.subtract(10, 5));  // 5

この例では、Calculatorクラスにaddsubtractという2つの静的メソッドが定義されています。クラスのインスタンスを作成することなく、クラス名を使って直接メソッドを呼び出しています。

静的メソッドの利点

静的メソッドは、次のような場面で特に便利です:

  • クラスのインスタンスごとに異なる状態を持たない処理をまとめる。
  • ユーティリティ関数や共通の処理をクラスに集約し、再利用性を高める。
  • 特定のインスタンスに依存しないロジックを提供する。

静的メソッドとインスタンスメソッドの違い

静的メソッドとインスタンスメソッドは、どちらもクラス内に定義されますが、その動作や使用方法は異なります。以下の表で、両者の違いをまとめます。

静的メソッド インスタンスメソッド
クラス自体に属する インスタンスに属する
インスタンスを作成せずに呼び出せる インスタンスを作成してから呼び出す
クラスの共通の機能を提供 インスタンス固有の機能を提供

静的メソッドとインスタンスメソッドの例

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

    // インスタンスメソッド
    greet() {
        console.log("Hello, my name is " + this.name);
    }

    // 静的メソッド
    static description() {
        console.log("This is a Person class.");
    }
}

const person1 = new Person("Taro");
person1.greet();  // "Hello, my name is Taro"

Person.description();  // "This is a Person class."

この例では、greetはインスタンスメソッドで、インスタンス化されたオブジェクトperson1で呼び出されます。一方、descriptionは静的メソッドであり、クラスPersonから直接呼び出されます。

ユーティリティ関数としての利用

静的メソッドは、クラスの外部からでもクラス名を使って直接呼び出せるため、ユーティリティ関数として利用されることが多いです。例えば、Mathクラスのように、数値計算やデータ処理に便利なメソッドを提供することが可能です。

静的メソッドを使ったユーティリティ関数の例

class MathUtil {
    static square(num) {
        return num * num;
    }

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

console.log(MathUtil.square(3));  // 9
console.log(MathUtil.cube(3));    // 27

この例では、MathUtilクラスにsquare(二乗)とcube(三乗)という静的メソッドを定義し、数値の計算処理を提供しています。

まとめ

静的メソッドは、クラス全体で共有される共通の機能や処理をまとめるのに適しており、ユーティリティ関数やインスタンスに依存しない処理を提供する際に有効です。インスタンスを作成する必要がないため、クラスそのものの動作や情報にアクセスする場合に便利です。