JSのclass構文はいつ使う?
JavaScriptでオブジェクト指向プログラミングを行う際、従来はプロトタイプベースの手法が主流でした。しかし、 ECMAScript 2015 (ES6) から導入された `class` 構文を使うことで、より馴染みやすく、可読性の高いコードでオブジェクト指向を実現できるようになりました。
class構文の基礎
`class` 構文は、オブジェクトの設計図となる「クラス」を定義するための構文です。クラスは、オブジェクトの状態を表す「プロパティ」と、オブジェクトの動作を表す「メソッド」をまとめたものです。
`class` 構文の基本的な記述方法は以下の通りです。
class クラス名 {
constructor(引数1, 引数2, ...) { // コンストラクタ
this.プロパティ名1 = 引数1;
this.プロパティ名2 = 引数2;
...
}
メソッド名1(引数1, 引数2, ...) {
// メソッドの処理
}
メソッド名2(引数1, 引数2, ...) {
// メソッドの処理
}
...
}
constructor
は、クラスからオブジェクト(インスタンス)を生成する際に呼ばれる特別なメソッドです。オブジェクトの初期化を行います。this
は、生成されるインスタンス自身を参照します。
class構文を使うメリット
従来のプロトタイプベースの手法と比較して、`class` 構文には以下のメリットがあります。
メリット | 説明 |
---|---|
コードの可読性向上 | 他のオブジェクト指向言語と似た構文のため、JavaScriptに不慣れな人でも理解しやすい。 |
コードの再利用性向上 | クラスを定義することで、オブジェクトの構造や振る舞いを簡単に再利用できる。 |
継承の実装が容易 | `extends` キーワードを用いることで、既存のクラスを継承した新しいクラスを簡単に定義できる。 |
class構文の使用例
例えば、「人」を表すクラスを `class` 構文で定義してみましょう。
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`こんにちは、私の名前は${this.name}です。${this.age}歳です。`);
}
}
const person1 = new Person("山田太郎", 20);
person1.greet(); // 出力結果: "こんにちは、私の名前は山田太郎です。20歳です。"
const person2 = new Person("鈴木花子", 25);
person2.greet(); // 出力結果: "こんにちは、私の名前は鈴木花子です。25歳です。"
上記コードでは、`Person` クラスを定義し、名前と年齢を引数に取るコンストラクタと、挨拶をする `greet` メソッドを定義しています。そして、`new` キーワードを使って `Person` クラスのインスタンスを生成し、それぞれのインスタンスに対して `greet` メソッドを呼び出しています。
いつclass構文を使うべきか?
以下の場合は、`class` 構文の使用を検討するべきです。
- 複数のオブジェクトを生成する必要がある場合
- オブジェクト指向の概念(カプセル化、継承、ポリモーフィズム)を活用したい場合
- コードの可読性や再利用性を向上させたい場合
一方、以下のような場合は、`class` 構文を用いる必要性は低いです。
- 単一のオブジェクトを生成する場合
- 複雑なプロトタイプ操作が必要な場合
参考資料
QA
- Q1. `class` 構文はES5以前の環境では使えますか?
- A1. いいえ、`class` 構文はES6 (ECMAScript 2015) から導入された機能です。ES5以前の環境で使用する場合は、Babelなどのトランスパイラを使用してES5互換のコードに変換する必要があります。
- Q2. `class` 構文とプロトタイプベースの手法のどちらを使うべきですか?
- A2. 状況によります。`class` 構文は可読性や再利用性の面で優れていますが、プロトタイプベースの手法は柔軟性が高いという特徴があります。それぞれのメリット・デメリットを理解した上で、適切な方を選択してください。
- Q3. `class` 構文で定義したクラスはどのように継承できますか?
- A3. `extends` キーワードを使用して継承できます。継承元のクラスをスーパークラス、継承先のクラスをサブクラスと呼びます。サブクラスはスーパークラスのプロパティやメソッドを引き継ぎ、独自の機能を追加することができます。
その他の参考記事:jquery class 削除