Interpreterパターンの解説

Interpreterパターンとは、言語や表現を解析して、その意味を解釈するためのデザインパターンだ。これにより、特定の言語に従った文を解析して処理することができる。

たとえば、簡単なゲームでプレイヤーのコマンドを解析して、実行するようなシステムに使える。

では、サンプルコードを一緒に見ていこう。

解説

たとえば、私が君に「今日はこの問題を解きなさい」と言ったら、君はその指示に従って何をすればいいか理解するよね。このパターンは、そのように「ある言葉(コマンド)」を理解して処理する方法を作るんだ。

Step 1: 表現を解釈するクラスを作成する

Interpreter パターンでは、まず解釈したい「文法」を定義する。それをクラスにして、どんなコマンドが来ても、それを解釈できるようにするんだ。


// 表現を解釈するクラス
class NumberExpression {
  constructor(number) {
    this.number = number;
  }

  interpret() {
    return this.number;
  }
}
      

Step 2: 足し算や引き算の解釈を作る

次に、足し算や引き算を解釈できるクラスを作ろう。このクラスでは、数字同士をどうやって計算するかを決める。


// 足し算の表現を解釈するクラス
class AddExpression {
  constructor(leftExpression, rightExpression) {
    this.leftExpression = leftExpression;
    this.rightExpression = rightExpression;
  }

  interpret() {
    return this.leftExpression.interpret() + this.rightExpression.interpret();
  }
}

// 引き算の表現を解釈するクラス
class SubtractExpression {
  constructor(leftExpression, rightExpression) {
    this.leftExpression = leftExpression;
    this.rightExpression = rightExpression;
  }

  interpret() {
    return this.leftExpression.interpret() - this.rightExpression.interpret();
  }
}
      

Step 3: 文法を解釈して実行する

最後に、解釈したい数字やコマンドを指定して、実際に計算を行う。これがInterpreterパターンの実装だ。


// 数字を解釈する
const five = new NumberExpression(5);
const ten = new NumberExpression(10);

// 足し算を解釈する
const addExpression = new AddExpression(five, ten);
console.log(addExpression.interpret()); // 出力: 15

// 引き算を解釈する
const subtractExpression = new SubtractExpression(ten, five);
console.log(subtractExpression.interpret()); // 出力: 5
      

Interpreterパターンの重要なポイント

これでInterpreterパターンの解説は終わりだ。
このパターンを使うと、特定のルールに従った文やコマンドを簡単に解析し、実行することができるため、簡単な言語処理やコマンド解析に便利だ。