SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
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/

Mais conteúdo relacionado

Mais procurados

Mais procurados (7)

LabMM4 (T17 - 12/13)
LabMM4 (T17 - 12/13)LabMM4 (T17 - 12/13)
LabMM4 (T17 - 12/13)
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 
Top0
Top0Top0
Top0
 
Estouro de quota
Estouro de quotaEstouro de quota
Estouro de quota
 
Fundamentos de SQL - Parte 2 de 8
Fundamentos de SQL - Parte 2 de 8Fundamentos de SQL - Parte 2 de 8
Fundamentos de SQL - Parte 2 de 8
 
Apostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a ParteApostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a Parte
 
Aula 02 e 03 estrutura básica parte 01 e 02
Aula 02 e 03 estrutura básica parte 01 e 02Aula 02 e 03 estrutura básica parte 01 e 02
Aula 02 e 03 estrutura básica parte 01 e 02
 

Destaque

Presentación foro pie
Presentación foro piePresentación foro pie
Presentación foro piecratefundacion
 
Social Care Leadership Style
Social Care Leadership StyleSocial Care Leadership Style
Social Care Leadership StyleNeil Eastwood
 
Gta 5-cheats-pc-pt
Gta 5-cheats-pc-ptGta 5-cheats-pc-pt
Gta 5-cheats-pc-ptGRANDE
 
Esterilidad y infertilidad
Esterilidad y infertilidadEsterilidad y infertilidad
Esterilidad y infertilidadSergio Bermudez
 
INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...
INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...
INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...Stefany Arévalo
 
Nikola Pastircakova a Klaudia Vaskova
Nikola Pastircakova a Klaudia VaskovaNikola Pastircakova a Klaudia Vaskova
Nikola Pastircakova a Klaudia VaskovaLydia Zlacka
 
Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇
Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇
Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇Ege Can Serefoglu MD FECSM
 
Normalización de la firma - ORCID
Normalización de la firma - ORCIDNormalización de la firma - ORCID
Normalización de la firma - ORCIDBibliotecaUlima
 
THE HIGH MIDDLE AGES
THE HIGH MIDDLE AGESTHE HIGH MIDDLE AGES
THE HIGH MIDDLE AGESGeotrueba
 

Destaque (14)

Presentación foro pie
Presentación foro piePresentación foro pie
Presentación foro pie
 
Socialz dbr
Socialz dbrSocialz dbr
Socialz dbr
 
Social Care Leadership Style
Social Care Leadership StyleSocial Care Leadership Style
Social Care Leadership Style
 
The ozone layer mohd
The ozone layer mohdThe ozone layer mohd
The ozone layer mohd
 
Gta 5-cheats-pc-pt
Gta 5-cheats-pc-ptGta 5-cheats-pc-pt
Gta 5-cheats-pc-pt
 
Esterilidad y infertilidad
Esterilidad y infertilidadEsterilidad y infertilidad
Esterilidad y infertilidad
 
Reciclart S.L.
Reciclart S.L.Reciclart S.L.
Reciclart S.L.
 
INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...
INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...
INTERVENCIÓN PSICOLÓGICA INDIVIDUAL, FAMILIAR Y ESCOLAR EN NIÑOS Y ADOLESCENT...
 
Martin Tokar
Martin TokarMartin Tokar
Martin Tokar
 
Martin Miklosko
Martin MikloskoMartin Miklosko
Martin Miklosko
 
Nikola Pastircakova a Klaudia Vaskova
Nikola Pastircakova a Klaudia VaskovaNikola Pastircakova a Klaudia Vaskova
Nikola Pastircakova a Klaudia Vaskova
 
Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇
Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇
Erektil Disfonksiyon Hastasinin Değerlendi̇ri̇lmesi̇
 
Normalización de la firma - ORCID
Normalización de la firma - ORCIDNormalización de la firma - ORCID
Normalización de la firma - ORCID
 
THE HIGH MIDDLE AGES
THE HIGH MIDDLE AGESTHE HIGH MIDDLE AGES
THE HIGH MIDDLE AGES
 

Semelhante a Entendendo as Closures no Groovy - Parte 1

Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Ilton Barbosa
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 
JavaScript - Aula Introdutória
JavaScript - Aula IntrodutóriaJavaScript - Aula Introdutória
JavaScript - Aula Introdutórialucasleite
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
Seminário Drupal São Paulo
Seminário Drupal São PauloSeminário Drupal São Paulo
Seminário Drupal São Paulopedrofaria
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPLuiz Henrique Zambom Santana
 
Aula 10 - Trabalhando com Templates - Programação Web
Aula 10  - Trabalhando com Templates - Programação WebAula 10  - Trabalhando com Templates - Programação Web
Aula 10 - Trabalhando com Templates - Programação WebDalton Martins
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 

Semelhante a Entendendo as Closures no Groovy - Parte 1 (20)

Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
JavaScript - Aula Introdutória
JavaScript - Aula IntrodutóriaJavaScript - Aula Introdutória
JavaScript - Aula Introdutória
 
NotORM
NotORMNotORM
NotORM
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
Dominando o customizer
Dominando o customizerDominando o customizer
Dominando o customizer
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Seminário Drupal São Paulo
Seminário Drupal São PauloSeminário Drupal São Paulo
Seminário Drupal São Paulo
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHP
 
Aula 10 - Trabalhando com Templates - Programação Web
Aula 10  - Trabalhando com Templates - Programação WebAula 10  - Trabalhando com Templates - Programação Web
Aula 10 - Trabalhando com Templates - Programação Web
 
Revista programar 6
Revista programar 6Revista programar 6
Revista programar 6
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Java script
Java scriptJava script
Java script
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 

Entendendo as Closures no Groovy - Parte 1

  • 1. MÉTODO X CLOSURE ENTENDENDO AS CLOSURES NO GROOVY – PARTE 1 println "Jonatas Emidio"
  • 2. 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?
  • 3. 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.
  • 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 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.
  • 6. 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
  • 7. 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.
  • 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.