JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのメソッドチェーンとは?初心者向けに基本と実践例をわかりやすく解説

メソッドチェーンとは

メソッドチェーン(Method Chaining)は「カスケーディング(Cascading)」とも呼ばれ、1つの連続したコードの中で、同じオブジェクトのメソッドを次々と呼び出していく手法です。この仕組みを活用すると、同じオブジェクト名を何度も書く冗長なコードを避けられます。ここでは、車(Car)クラスを例に、メソッドチェーンがどのようにコードの重複をなくすのかを見ていきましょう。

通常の実装例

まずは、ごく一般的なCarクラスの実装です。

class Car {
  constructor() {
    this.wheels = 4;
    this.doors = 4;
    this.topSpeed = 100;
    this.fuelCapacity = "400 Litres";
  }
  setWheels(w) {
    this.wheels = w;
  }
  setDoors(d) {
    this.doors = d;
  }
  setTopSpeed(t) {
    this.topSpeed = t;
  }
  setFuelCapacity(fc) {
    this.fuelCapacity = fc;
  }
  displayCarProps() {
    console.log(`Your car has ${this.wheels} wheels, ${this.doors} doors with a top speed of ${this.topSpeed} and fuel capacity of ${this.fuelCapacity}`);
  }
}

let sportsCar = new Car();
sportsCar.setDoors(2);
sportsCar.setTopSpeed(250);
sportsCar.setFuelCapacity("600 Litres");
sportsCar.displayCarProps();

実行結果

Your car has 4 wheels, 2 doors with a top speed of 250 and fuel capacity of 600 Litres

sportsCarが何度も不必要に繰り返されているのがわかりますね。この重複は、メソッドチェーンを使えば解消できます。方法はシンプルで、各セッターメソッドの最後にthisを返す(return this)ようにするだけです。こうすることで、メソッドの戻り値としてオブジェクト自身が得られるため、そのまま続けて別のメソッドを呼び出せるようになります。

メソッドチェーン対応版の実装

各セッターでthisを返すように変更したコードがこちらです。

class Car {
  constructor() {
    this.wheels = 4;
    this.doors = 4;
    this.topSpeed = 100;
    this.fuelCapacity = "400 Litres";
  }
  setWheels(w) {
    this.wheels = w;
    return this;
  }
  setDoors(d) {
    this.doors = d;
    return this;
  }
  setTopSpeed(t) {
    this.topSpeed = t;
    return this;
  }
  setFuelCapacity(fc) {
    this.fuelCapacity = fc;
    return this;
  }
  displayCarProps() {
    console.log(`Your car has ${this.wheels} wheels, ${this.doors} doors with a top speed of ${this.topSpeed} and fuel capacity of ${this.fuelCapacity}`);
  }
}

これで、車オブジェクトの生成部分を、より読みやすく重複の少ないコードに書き換えられます。

メソッドチェーンを使った呼び出し例

let sportsCar = new Car()
  .setDoors(2)
  .setTopSpeed(250)
  .setFuelCapacity("600 Litres")
  .displayCarProps();

実行結果

Your car has 4 wheels, 2 doors with a top speed of 250 and fuel capacity of 600 Litres

まとめ

メソッドチェーンは「流れるようなインターフェース(Fluent Interface)」とも呼ばれます。オブジェクト名を何度も書いて処理の流れを断ち切ることなく、メソッドだけで一気通貫に操作できるためです。セッター系メソッドでthisを返す習慣をつければ、jQueryやPromiseなどでも採用されているこの洗練された書き方を、自分のコードにも簡単に取り入れることができます。

  1. JavaScriptのsort()メソッドとは?配列ソートの基本と比較関数の使い方を解説

    JavaScriptのsort()メソッドは、配列の要素を並べ替えるための組み込みメソッドです。アルファベット順・数値順といった並べ替えの基準に加え、昇順・降順も自由に指定できます。デフォルトでは要素が文字列として比較され昇順にソートされますが、比較関数を渡すことで任意の順序を実現できます。 なお、sort()は元の配列そのものを変更する「破壊的メソッド」である点にも注意しましょう。元の配列を保持したい場合は、スプレッド構文([...arr])などで事前にコピーしておくのが安全です。 コード例 以下は、sort()メソッドを使って配列をソートするシンプルなサンプルコードです。 <!DO

  2. JavaScriptのObject.fromEntries()メソッドとは?配列やMapをオブジェクトに変換する方法

    JavaScriptのObject.fromEntries()メソッドは、「キー」と「値」のペアを持つ配列やMapなどのイテラブル(反復可能なオブジェクト)を、ひとつのオブジェクトに変換するためのメソッドです。 ES2019で追加されたこのメソッドは、オブジェクトを [key, value] 形式の配列に変換する Object.entries() と対になる存在であり、両者を組み合わせることで、オブジェクトのフィルタリングやデータ形式の変換を簡潔に記述できます。 基本構文 Object.fromEntries(iterable) 引数には、[キー, 値] のペアを要素として持つ配列やMapな