[ 85 ]
Groovy Closures
In this chapter, we will focus exclusively on closures. We touched upon closures
already in the previous chapter. Now, we will take a close look at them from every
angle. Why devote a whole chapter of the book to one aspect of the language? The
reason is that closures are the single most important feature of the Groovy language.
Closures are the special seasoning that helps Groovy stand out from Java. They are
also the single most powerful feature that we will use when implementing DSLs.
In this chapter, we will discuss the following topics:
- We will start by explaining just what a closure is and how we can define
some simple closures in our Groovy code - We will look at how many of the built-in collection methods make use of
closures for applying iteration logic, and see how this is implemented by
passing a closure as a method parameter - We will look at the various mechanisms for calling closures, and we will take
a look under the covers at how Groovy implements its various doCall()
methods for different parameter types - We will go into some depth on how parameters are passed to closures,
including a discussion on optional type annotations and default
parameter values - We will take a look at how return values are handled in closures, and finally,
we will look into how scope affects closures, particularly the field variables
that are visible in surrounding scopes - Finally, we will look at some of the more advanced closure features such as
parameter currying, closure composition, trampolines, and memorization
A handy reference that you might want to consider having to hand while you read
this chapter is GDK JavaDocs, which will give you full class descriptions of all of the
Groovy built-in classes, but of particular interest here is groovy.lang.Closure.