ग्रूवी - डीएसएलएस

ग्रूवी शीर्ष स्तर के बयानों के लिए विधि कॉल के तर्कों के आसपास एक कोष्ठकों को छोड़ देने की अनुमति देता है। इसे "कमांड चेन" फीचर के रूप में जाना जाता है। यह एक्सटेंशन एक ऐसे कोष्ठक-मुक्त विधि कॉल को चेन करने की अनुमति देकर काम करता है, जिसके लिए न तो तर्कों के आसपास कोष्ठक की आवश्यकता होती है, न ही जंजीर कॉल के बीच डॉट्स की।

यदि एक कॉल के रूप में निष्पादित किया जाता है a b c d, यह वास्तव में के बराबर होगा a(b).c(d)

DSL या डोमेन विशिष्ट भाषा का अर्थ ग्रूवी में लिखे गए कोड को इस तरह से सरल बनाना है कि यह आम उपयोगकर्ता के लिए आसानी से समझ में आ जाए। निम्न उदाहरण दिखाता है कि डोमेन विशिष्ट भाषा होने से वास्तव में क्या मतलब है।

def lst = [1,2,3,4] 
print lst

उपरोक्त कोड प्रिंटलाइन स्टेटमेंट का उपयोग करके कंसोल पर प्रिंट की जाने वाली संख्याओं की सूची दिखाता है। एक डोमेन विशिष्ट भाषा में निम्नानुसार होंगे -

Given the numbers 1,2,3,4
 
Display all the numbers

तो उपरोक्त उदाहरण डोमेन विशिष्ट भाषा की जरूरतों को पूरा करने के लिए प्रोग्रामिंग भाषा के परिवर्तन को दर्शाता है।

आइए एक सरल उदाहरण देखें कि हम ग्रूवी में डीएसएल को कैसे लागू कर सकते हैं -

class EmailDsl {  
   String toText 
   String fromText 
   String body 
	
   /** 
   * This method accepts a closure which is essentially the DSL. Delegate the 
   * closure methods to 
   * the DSL class so the calls can be processed 
   */ 
   
   def static make(closure) { 
      EmailDsl emailDsl = new EmailDsl() 
      // any method called in closure will be delegated to the EmailDsl class 
      closure.delegate = emailDsl
      closure() 
   }
   
   /** 
   * Store the parameter as a variable and use it later to output a memo 
   */ 
	
   def to(String toText) { 
      this.toText = toText 
   }
   
   def from(String fromText) { 
      this.fromText = fromText 
   }
   
   def body(String bodyText) { 
      this.body = bodyText 
   } 
}

EmailDsl.make { 
   to "Nirav Assar" 
   from "Barack Obama" 
   body "How are things? We are doing well. Take care" 
}

जब हम उपरोक्त कार्यक्रम चलाते हैं, तो हमें निम्नलिखित परिणाम मिलेंगे -

How are things? We are doing well. Take care

उपरोक्त कोड कार्यान्वयन के बारे में निम्नलिखित बातों पर ध्यान दिया जाना चाहिए -

  • एक स्थैतिक विधि का उपयोग किया जाता है जो एक क्लोजर को स्वीकार करता है। यह एक DSL को लागू करने के लिए ज्यादातर एक परेशानी मुक्त तरीका है।

  • ईमेल उदाहरण में, क्लास ईमेलडेल में एक मेक विधि है। यह एक उदाहरण बनाता है और सभी कॉल को बंद करने के उदाहरण में दर्शाता है। यह वह तंत्र है जहां "से", और "से" अनुभाग ईमेलडेल वर्ग के अंदर निष्पादन की विधियों को समाप्त करते हैं।

  • एक बार () विधि कहा जाता है, हम बाद में स्वरूपण के लिए उदाहरण में पाठ को संग्रहीत करते हैं।

  • अब हम एक आसान भाषा के साथ EmailDSL पद्धति को कॉल कर सकते हैं जो अंतिम उपयोगकर्ताओं के लिए समझना आसान है।