Book Image

Groovy for Domain-Specific Languages

By : Fergal Dearle
Book Image

Groovy for Domain-Specific Languages

By: Fergal Dearle

Overview of this book

<p>You may already be aware that the Java virtual machine runs on everything from the largest mainframe to the smallest microchip and supports almost every conceivable application. What you may not realize is that to develop software in some of these scenarios requires a targeted, single purpose language, a Domain Specific Language. The popular scripting language Groovy can be used to create a Domain Specific Language that can run directly on the JVM alongside regular Java code.This comprehensive tutorial will take you through the design and development of Groovy-based Domain Specific Languages. It is a complete guide to the development of several mini-DSLs with a lot of easy-to-understand examples. This book will help you to gain all of the skills needed to develop your own Groovy-based DSLs, as it guides you from the basics through to the more complex meta-programming features of Groovy. The focus is on how the Groovy language can be used to construct domain-specific mini-languages. Practical examples are used throughout to de-mystify the seemingly complex language features and to show how they can be used to create simple and elegant DSLs. The examples include a quick and simple Groovy DSL to interface with Twitter.The book concludes with a chapter focusing on integrating Groovy-based DSLs in such a way that the scripts can be readily incorporated into the readers' own Java applications. The overall goal of this book is to take Java developers through the skills and knowledge they need to start building effective Groovy-based DSLs to integrate into their own applications.</p>
Table of Contents (15 chapters)
Groovy for Domain-Specific Languages
Credits
About the Author
About the Reviewers
Preface
Free Chapter
1
Introduction to DSL and Groovy
Index

ExpandoMetaClasses


We briefly touched on metaclasses when building our Twitter DSL in Chapter 4. In the coming example, we've used String.metaClass to dynamically add a method to the String class for Twitter searching. Let's look at what is happening here.

String.metaClass.search = { Closure c ->
   GeeTwitter.search(delegate,c)
}

From the earlier section on Expandos, we understand how an Expando allows us to dynamically add a property to a class. That's all that is happening here. In the above code, we are dynamically adding a property to the MetaClass for String in the same way as we added properties to the Expando. This property happens to be a Closure, and the object happens to be the MetaClass of String, so it has the effect of adding a new method to the String class.

Adding a regular property to a MetaClass can be achieved in the same way as with Expandos. There is only a single MetaClass per Groovy or Java class, so this is useful only if we have a new property that is relevant across...