الگوی طراحی interpreter در جاوا اسکریپت

الگوی طراحی interpreter در جاوا اسکریپت نوشته شده در   javascript ۲۴ فروردین , ۱۳۹۸ توسط  عباس حسینی

آیا تا به حال در هنگام برنامه نویسی نیاز به یک مفسری پیدا کرده اید که یک رشته را تبدیل به یک عبارت معنا دار بکند ؟ مثلا شی های از نوع تاریخ را در نظر بگیرید که یک رشته دریافت کرده و یک ساختار مشخص تاریخ به ما تحویل میدهد
اگر تا به حال به این موارد بر خورده اید باید بدانید که الگویی که به شما در حل مسئله کمک میکند الگوی طراحی interpreter میباشد که در ادامه به آن خواهم پرداخت

تعریف الگوی طراحی interpreter در جاوا اسکریپت

الگوی طراحی interpreter الگویی است که برای تفسیر یک عبارت به یک گرامر زبان یا الگوی خاص مورد استفاده قرار میگیرد از این رو به آن الگوی مفسر یا interpreter میگویند

و از اجزای زیر تشکیل شده است

Terminal Expressions: عبارتی که اشاره به عبارت دیگر ندارد مثل اعداد ریاضی

None terminal Expression: عبارتی که به یک یا چند عبارت دیگر اشاره دارند مثل ۴ عمل اصلی ریاضی

Context :حاوی اطلاعاتی است که برای مفسر قابل دسترسی است.

interpreter pattern

نحوه پیاده سازی الگوی طراحی interpreter در جاو اسکریپت

برای پیاده سازی این الگو از یک مثال خیلی ساده استفاده میکنم و قصد دارم فرآیند جمع و تفریق را با این الگو پیاده سازی کنم که شامل سه کلاس اصلی Sum ،Min و Num میباشد که هر کدام دارای یک متد interpret میباشد که برای هر یک تفسیر های زیر را انجام میدهد
متد interpreter مرتبط با کلاس Sum : جمع دو عبارت را محاسبه و برمیگرداند (terminal expression)
متد interpreter مرتبط با کلاس Min : تفریق دو عبارت را محاسبه و برمیگرداند (non terminal expression)
متد interpreter مرتبط با کلاس Num : مقدار فعلی یک عدد را برمیگرداند (non terminal expression)


class Sum {
  constructor(left, right) {
    this.left = left;
    this.right = right;
  }

  interpret() {
    return this.left.interpret() + this.right.interpret();
  }
}

class Min {
  constructor(left, right) {
    this.left = left;
    this.right = right;
  }

  interpret() {
    return this.left.interpret() - this.right.interpret();
  }
}
class Num {
  constructor(val) {
    this.val = val;
  }

  interpret() {
    return this.val;
  }
}

حال برای استفاده از این الگو قصد دارم حاصل تفریق دو عدد ۳ و ۱ را با حاصل جمع دو عدد ۹ و ۱ را جمع کنم که خروجی این عدد باید عدد ۱۲ باشد که نتیجه آن را در ادامه مشاهده میکنید

See the Pen
Javascript Iterator Pattern
by abbas hosseini (@abizebel)
on CodePen.

موارد استفاده از الگوی interpreter در جاوا اسکریپت

یکی از کاربرد های مهم این زبان برای طراحی زبان های domain specific language ها است
domain specific language زبانی است که گرامر ساده خود را دارا میباشد مثل زبان sql

لیست الگوهای طراحی GOF در جاو اسکریپت

 

Creational Patterns

 

Structural Patterns

 

Behavioral Patterns