MÉTODO X CLOSURE
ENTENDENDO AS CLOSURES NO
GROOVY – PARTE 1
println "Jonatas Emidio"
INÍCIO DA DÚVIDA
Uma 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 uma
dú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 estava
sendo gerado era muito rico e tive a ideia de compilar todas
essas informações em um post de fácil entendimento.
A SACADA
Pois 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 1
Para os que estão acostumados com desenvolvimento java e já teve a oport
unidade 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 se
guinte:
<font color="#4a86e8">def </font>clos = { <b>print </b>“Hello”}
<font color="#00ff00">// - clos2: Onde a closure recebera algum valor na sua chamad
<font color="#4a86e8">def </font>clos2 = {<b>print </b>it}. clos2(‘Hello’) /*Onde o
TRABALHANDO COM LISTAS
També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 fazerisso
no groovy.
LISTA: IDEIA 1
1 – Podemos utilizar o collect aplicando a logica para cada
item iterado:
Definição: Foi criada uma lista com as vogais e uma lista vazia que rece
berá 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 pa
râ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 2
2 – Digamos que a logica a ser aplicada a cada item é um
pouco mais complicada, também podemos encapsula-la em
outra 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 p
odemos aproveitar a segunda closure para encapsular uma lógica mais comp
lexa 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 passand
o 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.
FIM
Por fim. É claro que não paramos por aqui.
Closures no groovy pode se transformar em
um mundo quando utilizamos a boa e velha
lógica de programação em conjunto com os
conceitos da linguagem.
Lembrando que este post foi só um
esclarecimento de closure para dar
continuidade nos próximos posts.
CONTATOS
jonatasemidio@gmail.com
http://jonatasemidio.com/
http://santograils.org/

Método x closure

  • 1.
    MÉTODO X CLOSURE ENTENDENDOAS CLOSURES NO GROOVY – PARTE 1 println "Jonatas Emidio"
  • 2.
    INÍCIO DA DÚVIDA Umadas 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 uma dúvida… Será que eu ganho ou perco desempenho utilizando- as na aplicação?
  • 3.
    A BUSCA Iniciei asconsultas 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 estava sendo gerado era muito rico e tive a ideia de compilar todas essas informações em um post de fácil entendimento.
  • 4.
    A SACADA Pois 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;
  • 5.
    GROOVY IN ACTION Segundoo 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.
  • 6.
    EXEMPLO 1 Para osque estão acostumados com desenvolvimento java e já teve a oport unidade 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 se guinte: <font color="#4a86e8">def </font>clos = { <b>print </b>“Hello”} <font color="#00ff00">// - clos2: Onde a closure recebera algum valor na sua chamad <font color="#4a86e8">def </font>clos2 = {<b>print </b>it}. clos2(‘Hello’) /*Onde o
  • 7.
    TRABALHANDO COM LISTAS Tambémda 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 fazerisso no groovy.
  • 8.
    LISTA: IDEIA 1 1– Podemos utilizar o collect aplicando a logica para cada item iterado: Definição: Foi criada uma lista com as vogais e uma lista vazia que rece berá 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 pa râ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>
  • 9.
    LISTA: IDEIA 2 2– Digamos que a logica a ser aplicada a cada item é um pouco mais complicada, também podemos encapsula-la em outra 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 p odemos aproveitar a segunda closure para encapsular uma lógica mais comp lexa 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 passand o 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.
  • 10.
    FIM Por fim. Éclaro que não paramos por aqui. Closures no groovy pode se transformar em um mundo quando utilizamos a boa e velha lógica de programação em conjunto com os conceitos da linguagem. Lembrando que este post foi só um esclarecimento de closure para dar continuidade nos próximos posts.
  • 11.