Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Método X Closure

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Método X Closure

Entenda as principais diferenças entre Método e Closure no Groovy!

Avatar for Jonatas Emidio

Jonatas Emidio

July 31, 2013

Other Decks in Programming

Transcript

  1. 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?
  2. 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.
  3. 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;
  4. GROOVY IN ACTION S e g u n d o

    o L i v r o G r o o v y i n a c t i o n : c l o s u r e s s ã o i m p o r t a n t e s , m u i t o i m p o r t a n t e s , s ã o d e l o n g e u m d o s r e c u r s o s m a i s i m p o r t a n t e s d o g r o o v y . Closure é um bloco de codígo encapsulado em um objeto. Definição tambem do Groovy in action.
  5. EXEMPLO 1 P a r a o s q u

    e e s t ã o a c o s t u m a d o s c o m d e s e n v o l v i m e n t o j a v a e j á t e v e a o p o r t u n i d a d e d e e s c r e v e r u m a c l o s u r e , d e v e t e r n o t a d o q u e s e u f l u x o l ó g i c o é d i f e r e n t e d o t r a d i c i o n a l , m a s a s s i m q u e n o s a c o s t u m a m o s c o m o s e u e s t i l o d e e s c r i t a o s a l g o r i t m o s f l u e m c o m o á g u a . U m s i m p l e s e x e m p l o d e c l o s u r e u t i l i z a d o n a d o c u m e n t a ç ã o d o g r o o v y é o s e g u i n t e : < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > c l o s = { < b > p r i n t < / b > “ H e l l o ” } < f o n t c o l o r = " # 0 0 f f 0 0 " > / / - c l o s 2 : O n d e a c l o s u r e r e c e b e r a a l g u m v a l o r n a s u a c h a m a d < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > c l o s 2 = { < b > p r i n t < / b > i t } . c l o s 2 ( ‘ H e l l o ’ ) / * O n d e o
  6. TRABALHANDO COM LISTAS T a m b é m d

    a d o c u m e n t a ç ã o d o g r o o v y , t e m o s d o i s e x e m p l o s b e m i n t e r e s s a n t e s d e c l o s u r e s p a r a l i s t a s . S u p o n h a q u e v o c ê p r e c i s e v a r r e r u m a d e t e r m i n a d a l i s t a e a p l i c a r a l g u m a l ó g i c a e m c a d a i t e m a n t e s d e i n s e r i - l o s e m o u t r a l i s t a . Pois bem… Temos basicamente duas formas simples de fazer isso no groovy.
  7. LISTA: IDEIA 1 1 – Podemos utilizar o collect aplicando

    a logica para cada item iterado: D e f i n i ç ã o : F o i c r i a d a u m a l i s t a c o m a s v o g a i s e u m a l i s t a v a z i a q u e r e c e b e r á o m a i ú s c u l o d e c a d a v o g a l . N e s t e c a s o o c o l l e c t é u t i l i z a d o p a r a a p l i c a r a l o g i c a a o i t ( v a r i á v e l d e f a u l t n o g r o o v y p a r a c l o s u r e s c o m a p e n a s u m p a r â m e t r o – n e s t e c a s o u m a o u t r a l i s t a ) e i n s e r i - l o n a l i s t a p a s s a d a p o r p a r â m e t r o . L o g o n o f i n a l t e r e m o s a s e g u i n t e l i s t a [ " A " , " E " , " I " , " O " , " U " ] < f o n t c o l o r = " # 4 a 8 6 e 8 " > < b r > < / f o n t > < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > l i s t = [ ' a ' , ' e ' , ' i ' ' o ' , ' u ' ] < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > n e w L i s t = [ ] l i s t . < f o n t c o l o r = " # 4 a 8 6 e 8 " > c o l l e c t < / f o n t > ( n e w L i s t ) { i t . t o U p p e r C a s e ( ) } < b r >
  8. 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. < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > l i s t = [ ' a ' , ' e ' , ' i ' , ' o ' , ' u ' ] < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > n e w L i s t = [ ] < f o n t c o l o r = " # 4 a 8 6 e 8 " > d e f < / f o n t > c l o s A u x = { i t . t o U p p e r C a s e l i s t . < f o n t c o l o r = " # 4 a 8 6 e 8 " > c o l l e c t < / f o n t > ( n e w L i s t , c l o s A u x D e f i n i ç ã o : N e s t e c a s o e s t a m o s t r a b a l h a n d o c o m a m e s m a l ó g i c a , m a s a q u i p o d e m o s a p r o v e i t a r a s e g u n d a c l o s u r e p a r a e n c a p s u l a r u m a l ó g i c a m a i s c o m p l e x a a s e r a t r i b u í d a a c a d a a t r i b u t o d a l i s t a i t e r a d a . A q u i , t e m o s u m a n o v a c l o s u r e c r i a d a q u e a t r i b u i u m a l ó g i c a ( n o i t ) p a r a n o f i n a l r e t o r n a - l o . L o g o e m s e g u i d a p o d e m o s c h a m a r o c o l l e c t p a s s a n d o a n o v a l i s t a e a c l o s u r e . P r o n t o , a l o g i c a d a c l o s u r e p a s s a d a p o r p a r â m e t r o s e r á u t i l i z a d a p a r a c a d a i t e m i t e r a d o d a l i s t a e a t r i b u i n d o a n o v a l i s t a .
  9. 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.