Book Image

Groovy for Domain-Specific Languages, Second Edition

By : Fergal Dearle
Book Image

Groovy for Domain-Specific Languages, Second Edition

By: Fergal Dearle

Overview of this book

Table of Contents (20 chapters)
Groovy for Domain-specific Languages Second Edition
Credits
About the Author
Acknowledgments
About the Reviewers
www.PacktPub.com
Preface
Free Chapter
1
Introduction to DSLs and Groovy
Index

Closures and collection methods


In the last chapter, we encountered Groovy lists and saw some of the iteration functions, such as the each method:

def flintstones = ["Fred","Barney"]

flintstones.each {
    println "Hello, ${it}"
}

This looks like it could be a specialized control loop similar to a while loop. In fact, it is a call to the each method of Object. The each method takes a closure as one of its parameters, and everything between the curly braces {} defines another anonymous closure.

Closures defined in this way can look quite similar to code blocks, but they are not the same. Code defined in a regular Java or Groovy style code block is executed as soon as it is encountered. With closures, the block of code defined in the curly braces is not executed until the call() method of the closure is made:

println "one"
def two = 
{ 
println "two" 
}
println "three"
two.call()
println "four"

This will print the following:

one
three
two
four

Let's dig a bit deeper into the structure of each...