Closures em Groovy

Uma closure em Groovy é um bloco de código ou um ponteiro de método. É um pedaço de código que é definido em um dado momento e executado em um ponto posterior.

Exemplo de closure em Groovy:

def clos = { println "hello! }

println "Executing the closure:"
clos()  //  Imprime: "hello!"

No exemplo acima, note que “hello!” é impresso quando a closure é chamada, não quando ela é definida.

Os parâmetros da closure são listados antes de “->”, exemplo:

def clos = { a, b -> print a+b }
clos( 5, 7 )  // Imprime: "12"

O token “->” é opcional e pode ser omitido se sua definição de closure tem menos do que dois parâmetros.

Existe ainda uma variável implícita denominada “it”. Ela tem um significado especial. Se você tem uma closure que tem apenas um único argumento, você pode omitir a definição de parâmetro da closure, assim:

def clos = { print it }
clos("hi there") // Imprime: "hi there"

Além disso, quando um método tem uma closure como último parâmetro, você pode definir a closure inline. Observe:

def list = ['a','b','c','d']
def newList = []

list.collect( newList ) {
      it.toUpperCase()
}
println newList           //  ["A", "B", "C", "D"]

Mas há outra forma de fazer isso. No exemplo abaixo, veja que o método collect aceita não só uma lista como também uma closure como parâmetro.

def list = ['a','b','c','d']
def newList = []

def clos = { it.toUpperCase() }
list.collect( newList, clos ) 

assert newList == ["A", "B", "C", "D"]

Enjoy! :)

Fonte: http://groovy.codehaus.org

5 comments:

  1. Rafael U. C. Afonso, 25. Fevereiro 2008, 17:01

    Olá Thânia:

    Vendo seu interesse emGroovy, acho que seria interessante dar uma passada no site do Grails Brasil: http://www.grailsbrasil.com/ . Espero que seja interessante para você.

    Grato,

    Rafael U. C. Afonso

  2. Thânia Clair, 26. Fevereiro 2008, 8:58

    Oi, Rafael,

    Vou dar um olhadinha sim. Obrigada! :)

  3. Pones, 27. Fevereiro 2008, 17:45

    Olá Thânia,

    Na minha pesquisa sobre alguma linguagem de script para Java também me levou ao Groovy. Fiquei bem interessado também, mas ainda estou em dúvida sobre LuaJava e Groovy.

    Enfim, meu comment é para dar uma sugestão para um próximo post seu: que tal um post falando sobre a integração do Groovy com o Java, isto é, chamar scripts Groovy de dentro do Java. Já que Groovy é uma linguagem “scriptada”, pode ser interessante para muitos um post deste tipo.

    Abraços, Philippe “Pones” Franklin

  4. Thânia Clair, 29. Fevereiro 2008, 13:33

    Olá, Pones!

    Ainda não sei como esta integração funciona, mas vou pesquisar com certeza. Ótima idéia, afinal isso será útil para todos nós programadores Java. ;)

  5. Luciano M., 6. Dezembro 2008, 9:49

    Muito obrigado pelo explicação de “CLOSURES”! estava precisando dessa luz!

Escreva um comentário: