JavaScript/JavaScriptのクラス
概要
編集JavaScriptのクラスは、クラスベースのオブジェクト指向プログラミング(OOP)のパラダイムを実現するための構文です。クラスはオブジェクトのテンプレートとして機能し、インスタンスを生成するための設計図を提供します。JavaScriptのクラスは、ECMAScript 2015(ECMAScript 6th edition: ES6)で導入され、オブジェクトの構造を定義し、メソッドやプロパティをクラスの中で管理することができます。
クラスの定義
編集JavaScriptでクラスを定義するには、class
キーワードを使用します。クラスの中には、コンストラクタやメソッドを定義することができます。
クラスの構文
編集class クラス名 { constructor() { // コンストラクタ } メソッド名() { // メソッド } }
例: 基本的なクラスの定義
編集class Person { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person1 = new Person("Alice", 25); person1.greet(); // "Hello, my name is Alice and I am 25 years old."
Person
クラスは、name
とage
というプロパティを持ち、greet
というメソッドを持っています。このクラスを使って、person1
というインスタンスを生成し、greet
メソッドを呼び出しています。
コンストラクタ
編集constructor
メソッドは、クラスのインスタンスが生成されたときに呼び出される特別なメソッドです。コンストラクタは、インスタンスに初期値を設定したり、プロパティを初期化したりするために使用されます。
例: コンストラクタの使用
編集class Car { constructor(make, model, year) { this.make = make; this.model = model; this.year = year; } } const myCar = new Car("Toyota", "Corolla", 2020); console.log(myCar); // Car { make: 'Toyota', model: 'Corolla', year: 2020 }
Car
クラスのコンストラクタは、車のメーカー、モデル、年式を受け取り、インスタンスのプロパティとして設定します。
メソッド
編集クラス内で定義された関数はメソッドと呼ばれ、そのクラスのインスタンスで呼び出すことができます。メソッドは、インスタンスのプロパティを操作したり、他のメソッドと連携したりするために使用されます。
例: メソッドの使用
編集class Rectangle { constructor(width, height) { this.width = width; this.height = height; } area() { return this.width * this.height; } } const rect = new Rectangle(5, 10); console.log(rect.area()); // 50
Rectangle
クラスには、area
というメソッドがあります。このメソッドは、矩形の面積を計算して返します。
継承
編集JavaScriptのクラスは、継承を使用して他のクラスからプロパティやメソッドを引き継ぐことができます。継承は、extends
キーワードを使用して実現します。
例: 継承の使用
編集class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { constructor(name, breed) { super(name); // 親クラスのコンストラクタを呼び出す this.breed = breed; } speak() { console.log(`${this.name} barks.`); } } const dog = new Dog("Buddy", "Golden Retriever"); dog.speak(); // "Buddy barks."
Dog
クラスは、Animal
クラスを継承し、speak
メソッドをオーバーライドしています。super
を使って親クラスのコンストラクタを呼び出し、name
を初期化しています。
静的メソッド
編集静的メソッドは、クラス自体に関連するメソッドであり、インスタンスではなくクラスから直接呼び出します。静的メソッドは、static
キーワードを使用して定義します。
例: 静的メソッドの使用
編集class MathUtil { static add(x, y) { return x + y; } } console.log(MathUtil.add(5, 3)); // 8
MathUtil
クラスには、add
という静的メソッドがあります。このメソッドは、インスタンスを作成せずにクラスから直接呼び出されています。
クラスのプロパティ
編集クラスプロパティは、クラスのインスタンスではなく、クラス自体に関連するプロパティです。ES2022以降、static
を使ってクラスプロパティを定義できます。
例: クラスのプロパティ
編集class Counter { static count = 0; constructor() { Counter.count++; } } const counter1 = new Counter(); const counter2 = new Counter(); console.log(Counter.count); // 2
Counter
クラスは、インスタンスが生成されるたびにcount
プロパティを増加させます。このプロパティはインスタンスではなく、クラスに関連付けられています。
クラスのgetterとsetter
編集getterとsetterは、オブジェクトのプロパティにアクセスするための特別なメソッドです。getterはプロパティを取得するため、setterはプロパティを設定するために使用されます。
例: getterとsetterの使用
編集class Person { constructor(name, age) { this._name = name; this._age = age; } get name() { return this._name; } set name(value) { this._name = value; } get age() { return this._age; } set age(value) { if (value >= 0) { this._age = value; } else { console.log("Age must be a positive number."); } } } const person = new Person("Alice", 30); console.log(person.name); // "Alice" person.age = 35; console.log(person.age); // 35
Person
クラスでは、name
とage
のプロパティに対してgetterとsetterを定義しています。
結論
編集JavaScriptのクラスは、オブジェクト指向プログラミングの概念を簡潔に実装するための強力なツールです。クラスを使うことで、コードの再利用性、拡張性、保守性を向上させることができます。継承、静的メソッド、getter・setterなどの機能を活用することで、より柔軟で強力なコードが書けるようになります。