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
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
Oi, Rafael,
Vou dar um olhadinha sim. Obrigada!
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
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.
Muito obrigado pelo explicação de “CLOSURES”! estava precisando dessa luz!