Interpreterパターンとは、言語や表現を解析して、その意味を解釈するためのデザインパターンだ。これにより、特定の言語に従った文を解析して処理することができる。
たとえば、簡単なゲームでプレイヤーのコマンドを解析して、実行するようなシステムに使える。
では、サンプルコードを一緒に見ていこう。
たとえば、私が君に「今日はこの問題を解きなさい」と言ったら、君はその指示に従って何をすればいいか理解するよね。このパターンは、そのように「ある言葉(コマンド)」を理解して処理する方法を作るんだ。
Interpreter パターンでは、まず解釈したい「文法」を定義する。それをクラスにして、どんなコマンドが来ても、それを解釈できるようにするんだ。
// 表現を解釈するクラス
class NumberExpression {
constructor(number) {
this.number = number;
}
interpret() {
return this.number;
}
}
次に、足し算や引き算を解釈できるクラスを作ろう。このクラスでは、数字同士をどうやって計算するかを決める。
// 足し算の表現を解釈するクラス
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();
}
}
最後に、解釈したい数字やコマンドを指定して、実際に計算を行う。これが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パターンの解説は終わりだ。
このパターンを使うと、特定のルールに従った文やコマンドを簡単に解析し、実行することができるため、簡単な言語処理やコマンド解析に便利だ。