Groovy for Domain-specific Languages - Second Edition

(nextflipdebug2) #1
[ 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.

Free download pdf