Groovy - DSLS

Groovy permet d'omettre les parenthèses autour des arguments d'un appel de méthode pour les instructions de niveau supérieur. Ceci est connu sous le nom de fonction "chaîne de commande". Cette extension fonctionne en permettant d'enchaîner de tels appels de méthode sans parenthèses, ne nécessitant ni parenthèses autour des arguments, ni points entre les appels chaînés.

Si un appel est exécuté comme a b c d, ce sera en fait équivalent à a(b).c(d).

Le langage DSL ou spécifique au domaine est destiné à simplifier le code écrit en Groovy de manière à ce qu'il devienne facilement compréhensible pour l'utilisateur ordinaire. L'exemple suivant montre ce que signifie exactement le fait d'avoir un langage spécifique à un domaine.

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

Le code ci-dessus montre une liste de nombres imprimés sur la console à l'aide de l'instruction println. Dans un langage spécifique à un domaine, les commandes seraient comme -

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

Ainsi, l'exemple ci-dessus montre la transformation du langage de programmation pour répondre aux besoins d'un langage spécifique à un domaine.

Regardons un exemple simple de la façon dont nous pouvons implémenter des DSL dans Groovy -

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" 
}

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons le résultat suivant -

How are things? We are doing well. Take care

Ce qui suit doit être noté à propos de l'implémentation du code ci-dessus -

  • Une méthode statique est utilisée qui accepte une fermeture. Il s'agit principalement d'un moyen simple d'implémenter un DSL.

  • Dans l'exemple de courrier électronique, la classe EmailDsl a une méthode make. Il crée une instance et délègue tous les appels de la fermeture à l'instance. C'est le mécanisme par lequel les sections «to» et «from» finissent par exécuter des méthodes à l'intérieur de la classe EmailDsl.

  • Une fois la méthode to () appelée, nous stockons le texte dans l'instance pour un formatage ultérieur.

  • Nous pouvons désormais appeler la méthode EmailDSL avec un langage simple et facile à comprendre pour les utilisateurs finaux.