JavaScriptの関数とクラスの違いは何ですか?

JavaScript における関数とクラスの違い

JavaScript は柔軟な言語であり、関数とクラスの両方を使用してコードを構造化できます。どちらも独自の利点があり、特定の状況に適しています。

概念

関数は処理の単位であり、単一のタスクを実行することに焦点を当てています。例えば、数値の配列を受け取り、その合計を返す関数を考えてみましょう。


function sum(numbers) {
  let total = 0;
  for (let i = 0; i < numbers.length; i++) {
    total += numbers[i];
  }
  return total;
}

一方、クラスはデータとそれを操作するメソッドをまとめたもので、オブジェクト指向プログラミングの概念に基づいています。クラスはオブジェクトの設計図と考えることができ、オブジェクトはその設計図に基づいて作成された具体的なインスタンスです。例えば、「車」を表すクラスを定義すると、そのクラスには「色」「メーカー」「モデル」などのプロパティと、「加速」「ブレーキ」「ターン」などのメソッドを含めることができます。


class Car {
  constructor(color, make, model) {
    this.color = color;
    this.make = make;
    this.model = model;
  }

  accelerate() {
    console.log("車が加速しています。");
  }

  brake() {
    console.log("車がブレーキをかけています。");
  }

  turn(direction) {
    console.log(`車が${direction}に曲がっています。`);
  }
}

違い

以下の表は、関数とクラスの主な違いをまとめたものです。

特徴 関数 クラス
目的 単一のタスクを実行する データとメソッドをカプセル化する
キーワード function class
インスタンス化 不要 必要 (newキーワードを使用)
継承 プロトタイプベースの継承が可能 クラスベースの継承をサポート
使い分け 小さなタスクやユーティリティ関数に適している 複雑なデータ構造やオブジェクト指向の設計に適している

いつ何を使うか?

  • 簡単なタスクやユーティリティ関数を作成する場合: 関数を使用します。
  • 複雑なデータ構造をモデル化する場合: クラスを使用します。
  • コードを再利用し、保守性を向上させる場合: クラスを使用します。
  • オブジェクト指向プログラミングの原則に従う場合: クラスを使用します。

参照

* Mozilla Developer Network: 関数 * Mozilla Developer Network: クラス

よくある質問

Q1: JavaScript はオブジェクト指向プログラミング言語ですか?

A1: はい、JavaScript はプロトタイプベースのオブジェクト指向プログラミング言語です。クラスは、プロトタイプベースの継承の上に構築された構文上の糖衣です。

Q2: 関数をクラスの代わりに使用できますか?

A2: はい、多くの場合、関数でクラスの機能を模倣できます。ただし、コードの複雑さが増し、保守が難しくなる可能性があります。特に大規模なプロジェクトでは、クラスを使用する方が適切です。

Q3: クラスとコンストラクタの違いは何ですか?

A3: クラスはオブジェクトの設計図であり、コンストラクタはクラスのインスタンスを作成する際に呼び出される特別なメソッドです。コンストラクタは、オブジェクトのプロパティの初期化などを行います。

その他の参考記事:JavaScript関数