静的メソッドとプロパティとは?
JavaScriptのクラスには、インスタンスに依存しない静的メソッドと静的プロパティを定義することができます。これらはクラス自体に属し、インスタンスを生成しなくてもクラス名から直接アクセス可能です。static
キーワードを使って定義します。
静的メソッドの定義と使い方
静的メソッドは、クラスに属し、インスタンスを必要としないメソッドです。以下のように定義します。
class MathOperations {
static add(a, b) {
return a + b;
}
}
console.log(MathOperations.add(5, 10)); // 出力: 15
この例では、MathOperations
クラスにadd
という静的メソッドが定義されています。インスタンスを作成せずに、クラス名を使って直接呼び出せます。
静的プロパティの定義と使い方
静的プロパティはクラス自体に紐づくプロパティであり、インスタンスに依存しません。JavaScriptのクラスではstatic
キーワードを使用して静的プロパティを定義します。
class Company {
static companyName = "Tech Innovators";
}
console.log(Company.companyName); // 出力: Tech Innovators
この例では、Company
クラスにcompanyName
という静的プロパティが定義されています。これもクラス名を使って直接アクセス可能です。
静的メソッドと静的プロパティの特徴
静的メソッドとプロパティの特徴を以下の表にまとめます。
項目 | 説明 |
---|---|
静的メソッド | クラスに直接属し、インスタンスを生成せずに呼び出せるメソッド。 |
静的プロパティ | クラスに属する変数で、インスタンスに依存しないプロパティ。 |
使用方法 | クラス名.メソッド名 、またはクラス名.プロパティ名 でアクセス。 |
インスタンスからのアクセス | インスタンスからはアクセスできない(クラス名を使用する必要がある)。 |
静的メソッドの活用例
静的メソッドは、インスタンス固有のデータを必要としないユーティリティ関数や共通処理を定義する際に便利です。以下に、静的メソッドを使った具体例を示します。
class TemperatureConverter {
static toCelsius(fahrenheit) {
return (fahrenheit - 32) * 5 / 9;
}
static toFahrenheit(celsius) {
return (celsius * 9 / 5) + 32;
}
}
console.log(TemperatureConverter.toCelsius(68)); // 出力: 20
console.log(TemperatureConverter.toFahrenheit(20)); // 出力: 68
この例では、TemperatureConverter
クラスに摂氏と華氏の温度変換を行う静的メソッドが定義されています。インスタンスを生成することなく、クラス名を使って温度変換を行えます。
静的プロパティの活用例
静的プロパティは、クラスに関連する定数や設定値を保持するのに便利です。以下に、静的プロパティを使った例を示します。
class GameSettings {
static maxPlayers = 4;
static gameName = "Super Fun Game";
static getSettings() {
return `Game: ${this.gameName}, Max Players: ${this.maxPlayers}`;
}
}
console.log(GameSettings.getSettings()); // 出力: Game: Super Fun Game, Max Players: 4
この例では、GameSettings
クラスにmaxPlayers
やgameName
といった静的プロパティが定義されています。これらのプロパティはゲームの設定値としてクラスに保持され、インスタンスを生成することなくアクセスできます。
まとめ
静的メソッドとプロパティは、クラスに属するユーティリティ関数や定数を扱う際に便利です。static
キーワードを使うことで、インスタンスを生成せずにクラス名から直接アクセスできます。静的メソッドはインスタンス固有のデータに依存しない処理に、静的プロパティはクラス全体で共有するデータに使用されます。
これにより、JavaScriptのクラス設計がより効率的でシンプルになります。これらの概念を理解し、実際のプロジェクトで活用することで、再利用可能で保守性の高いコードを作成することができます。