11
MÉTODO X CLOSURE ENTENDENDO AS CLOSURES NO GROOVY – PARTE 1 println "Jonatas Emidio"

Método x closure

Embed Size (px)

Citation preview

MÉTODO X CLOSURE

ENTENDENDO AS CLOSURES NOGROOVY – PARTE 1

println "Jonatas Emidio"

INÍCIO DA DÚVIDAUma das coisas que mais tem me chamado a atenção no

groovy é o seu suporte à closures. Logo passei a utiliza-las no lugar dos métodos, já que a

principio a função era a mesma. No entanto me surgiu umadúvida… Será que eu ganho ou perco desempenho utilizando-

as na aplicação?

A BUSCA

Iniciei as consultas no google e não tive muito sucesso, em

seguida postei minha duvida no grails brasil e pouco depois játinham várias respostas. Percebi que o conteúdo que estavasendo gerado era muito rico e tive a ideia de compilar todas

essas informações em um post de fácil entendimento.

A SACADAPois bem, para começar “métodos e closures” podem até

trazer o mesmo resultado, mas eles não são a mesma coisa.Este artigo será dividido em 3 posts, pois o mesmo possui

bastante conteúdo.

Entendendo as Closures no Groovy; Método X Closure; Teste de desempenho com Closures e Métodos;

GROOVY IN ACTION

Segundo o Livro Groovy in action:

closures são importantes, muito

importantes, são de longe um dos

recursos mais importantes do

groovy.

Closure é um bloco de codígo encapsulado em

um objeto. Definição tambem do Groovy in

action.

EXEMPLO 1Para os que estão acostumados com desenvolvimento java e já teve a oportunidade de escrever uma closure ,deve ter notado que seu fluxo lógico é diferente do tradicional, mas assim que nos acostumamos com o seu estilo de escrita os algoritmos fluem como água.

Um simples exemplo de closure utilizado na documentação do groovy é o seguinte:

<font color="#4a86e8">def </font>clos = { <b>print </b>“Hello”}

<font color="#00ff00">// - clos2: Onde a closure recebera algum valor na sua chamada e imprimirá o mesmo.</font>

<font color="#4a86e8">def </font>clos2 = {<b>print </b>it}. clos2(‘Hello’) /*Onde o mesmo imprime Hello*/

TRABALHANDO COM LISTASTambém da documentação do groovy, temos dois exemplos bem interessantes de closures para listas. Suponha que você precise varrer uma determinada lista e aplicar alguma lógica em cada item antes de inseri-los em outra lista.

Pois bem… Temos basicamente duas formas simples de fazer isso

no groovy.

LISTA: IDEIA 11 – Podemos utilizar o collect aplicando a logica para cadaitem iterado:Definição: Foi criada uma lista com as vogais e uma lista vazia que receberá o maiúsculo de cada vogal. Neste caso o collect é utilizado para aplicar a logica ao it (variável default no groovy para closures com apenas um parâmetro – neste caso uma outra lista) e inseri-lo na lista passada por parâmetro. Logo no final teremos a seguinte lista ["A", "E", "I", "O", "U"]

<font color="#4a86e8"><br></font>

<font color="#4a86e8">def </font>list = ['a','e','i''o','u']

<font color="#4a86e8">def </font>newList = []

list.<font color="#4a86e8">collect</font>( newList ) { it.toUpperCase() }

<br>

LISTA: IDEIA 22 – Digamos que a logica a ser aplicada a cada item é umpouco mais complicada, também podemos encapsula-la emoutra closure.<font color="#4a86e8">def </font>list = ['a','e','i','o','u'] <font color="#4a86e8">def </font>newList = [] <font color="#4a86e8">def </font>closAux = { it.toUpperCase() } list.<font color="#4a86e8">collect</font>( newList, closAux)

Definição: Neste caso estamos trabalhando com a mesma lógica, mas aqui podemos aproveitar a segunda closure para encapsular uma lógica mais complexa a ser atribuída a cada atributo da lista iterada. Aqui, temos uma nova closure criada que atribui uma lógica (no it) para no final retorna-lo. Logo em seguida podemos chamar o collect passando a nova lista e a closure. Pronto, a logica da closure passada por parâmetro será utilizada para cada item iterado da lista e atribuindo a nova lista.

FIMPor fim. É claro que não paramos por aqui.

Closures no groovy pode se transformar emum mundo quando utilizamos a boa e velhalógica de programação em conjunto com os

conceitos da linguagem.

Lembrando que este post foi só umesclarecimento de closure para darcontinuidade nos próximos posts.

CONTATOS

[email protected]

http://jonatasemidio.com/http://santograils.org/