CodeGym /コース /Frontend SELF JA /静的メソッド

静的メソッド

Frontend SELF JA
レベル 40 , レッスン 1
使用可能

8.1 静的メソッドの宣言

JavaScriptの静的メソッドは、クラス自体に定義されるメソッドで、クラスのインスタンスにはありません。 これらはクラスで直接呼び出され、クラスによって生成されたオブジェクトでは呼び出されません。静的メソッドは、 クラスと関連があるが特定のオブジェクトには関係しないユーティリティ関数を作成するのによく使われます。

静的メソッドは、クラス本体のメソッド定義の前にstaticキーワードを使って宣言されます。

例:

  • addmultiplyメソッドはstaticキーワードを使って静的に宣言されている
  • これらのメソッドはMathHelperクラスで直接呼び出され、そのインスタンスでは呼び出されません
JavaScript
    
      class MathHelper {
        static add(a, b) {
          return a + b;
        }

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

      console.log(MathHelper.add(5, 3)); // 8
      console.log(MathHelper.multiply(5, 3)); // 15
    
  

8.2 静的メソッドの利用

静的メソッドは以下のシナリオで役立ちます:

  1. ユーティリティ関数: 静的メソッドは、クラスに関連する操作を行うユーティリティ関数の作成に使用できます。
  2. ファクトリーメソッド: 静的メソッドは、特定のロジックでクラスのインスタンスを作成するのに使用できます。
  3. データ処理: 静的メソッドは、クラスに関連するがクラスのインスタンスを作成する必要のないデータを処理するのに使用できます。

ユーティリティ関数の例:

  • StringUtilクラスは、文字列を操作する静的メソッドcapitalizereverseを含む
  • これらのメソッドはStringUtilクラスで直接呼び出される
JavaScript
    
      class StringUtil {
        static capitalize(str) {
          return str.charAt(0).toUpperCase() + str.slice(1);
        }

        static reverse(str) {
          return str.split('').reverse().join('');
        }
      }

      console.log(StringUtil.capitalize('hello')); // "Hello"
      console.log(StringUtil.reverse('hello')); // "olleh"
    
  

ファクトリーメソッドの例:

静的メソッドfromObjectは、データオブジェクトからCarクラスのインスタンスを作成します。

JavaScript
    
      class Car {
        constructor(brand, model) {
          this.brand = brand;
          this.model = model;
        }

        static fromObject(obj) {
          return new Car(obj.brand, obj.model);
        }
      }

      const carData = { brand: 'Toyota', model: 'Camry' };
      const car = Car.fromObject(carData);

      console.log(car.brand); // "Toyota"
      console.log(car.model); // "Camry"
    
  

8.3 静的メソッドと継承

JavaScriptでは、静的メソッドは派生クラスによって継承されます。派生クラスは、基底クラスの静的メソッドを使用するか、オーバーライドすることができます。

静的メソッドの継承例:

  • 静的メソッドidentifyAnimalクラスに定義され、Dogクラスでオーバーライドされています
  • 両方のクラスでidentifyメソッドが呼び出されます
JavaScript
    
      class Animal {
        static identify() {
          return 'This is an animal';
        }
      }

      class Dog extends Animal {
        static identify() {
          return 'This is a dog';
        }
      }

      console.log(Animal.identify()); // "This is an animal"
      console.log(Dog.identify()); // "This is a dog"
    
  

8.4 他のメソッド内での静的メソッドへのアクセス

静的メソッドは、クラスの他のメソッド内でクラス名を使って呼び出すことができます。

例:

静的メソッドcalculateAreaは、Geometryクラス内の別の静的メソッドdescribeCircle内で、 thisキーワードを使って呼び出されます。このthisはクラスGeometry自体を指します。

JavaScript
    
      class Geometry {
        static calculateArea(radius) {
          return Math.PI * radius * radius;
        }

        static describeCircle(radius) {
          const area = this.calculateArea(radius);
          return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
        }
      }

      console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
    
  

8.5 静的メソッドとクラスインスタンス

静的メソッドはクラスのインスタンスで呼び出すことができません。インスタンスで静的メソッドを呼び出そうとするとエラーになります。

例:

静的メソッドaddCalculatorクラスで呼び出され、インスタンスcalcでは呼び出されません。

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

      const calc = new Calculator();
      console.log(Calculator.add(3, 4)); // 7

      console.log(calc.add(3, 4)); // エラー: calc.add は関数ではありません
    
  
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION