Por que Groovy?
Henrique Lobo Weissmann (Kico)
Posted on June 18, 2021
Texto escrito em 2013
Certa vez fui a uma palestra sobre Scala em que ao perguntar ao palestrante o que justificaria minha equipe treinada em Java adotar a linguagem recebi como resposta segundos de silêncio seguido por "muito obrigado a presença de todos vocês aqui". Como pretendo falar sobre Groovy em breve (coisas boas a caminho no próximo mês) aqui seguem algumas razões.
A pergunta que deve ser feita é: quais problemas Groovy soluciona ou pelo menos torna mais fácil de serem resolvidos?
Primeira pseudo-razão: é executado na JVM
Beng! Esta não é uma boa razão para se usar Groovy, pois o Java também é executado na JVM assim como diversas outras linguagens. É apenas um facilitador de adoção visto que você pode tirar proveito do seu código legado e de toda a bagagem que o Java já nos trás, mas não a razão.
(embora meu aprendizado por Groovy tenha sido fortemente influenciado no início por isto)
Pode ser executada como script usando código java legado e suas bibliotecas favoritas
Esta já é uma boa razão: não é raro eu precisar escrever código de manutenção. Pequenos scripts que executam determinadas tarefas em meus sistemas, tarefas estas que não precisam ser novos recursos deste, mas sim tarefas auxiliares. Exemplo: manipulação de entidades do sistema usando a lógica de negócio do próprio sistema.
Outra boa razão: scripts para manutenção de infra estrutura mesmo. Muitas vezes preciso escrever um script que use alguma biblioteca Java útil, como por exemplo o Commons Digester. É mais fácil pra mim que não sei bash direito usá-la com minha experiência Java do que com scripts do sistema operacional. (eu sei que é um exemplo bobo, mas vocês captaram a idéia).
E o formato script também é bastante convidativo. Há aqueles casos nos quais você quer escrever um programa que apenas varra uma lista de arquivos. O que você acha mais fácil de escrever e entender? A versão Java abaixo?
public class LeiaDiretorios {
public static void main(String args[]) {
File diretorio = new File("/diretorio");
for (File arquivo : diretorio) {
System.out.println(arquivo);
}
}
}
Ou a versão Groovy?
File diretorio = new File("/diretorio");
for (arquivo in diretorio) {
println arquivo
}
Tem recursos que ainda não existem no Java
É fato: Java tá a cada dia que se passa mais parecido com Groovy, mas nunca será o Groovy. Há alguns recursos na linguagem que sempre me atrairam tal como os que cito a seguir:
- Closures: facilitam demais a escrita de código funcional e também criação de código polimorfico. É um recurso muito poderoso, e que você só da valor depois de experimentar. Gravei um vídeo sobre isto. (eu podia escrever um outro post só sobre como este recurso sozinho já justificaria a linguagem)
- Builders: Groovy te permite lidar com estruturas hierarquicas usando o padrão de projeto builder nativamente. E ei... é lindo viu. Quer ver um exemplo? Conheça o Swing Builder, que te permite criar aplicações desktop com uma mão nas costas (e que o antigo Java FX era suspeitamente bastante parecido). Lidar com XML também é muito mais simples graças a este recurso. Da uma olhada no Markup Builder.
- O modo como lidamos com números: em Java quando preciso lidar com BigDecimal é uma luta (sei que vai melhorar no futuro, mas ainda não é uma realidade). Pra que escrever a.multiply(b) se posso simplesmente escrever a * b?
- Poder interpolar strings ao invés de simplesmente concatenar como no Java. Isto evita muito código horroroso e além disto é muito mais interessante. Strings em Groovy são como deveria ser no Java desde o início. Da uma lida neste link.
- O fato de ser uma linguagem dinâmica. Poder alterar meu código fonte em tempo de execução poupa muito tempo e a necessidade de implementar padrões de projetos muitas vezes complicados. Exemplo: por que implementar um decorator se posso mudar o comportamento de minha classe usando poucas linhas? Gravei um vídeo sobre isto que pode ser visto neste link.
- E basicamente tudo o que acho muito chato no Java em Groovy está resolvido. Ei: gravei sobre isto um vídeo também. Você pode assisti-lo neste link.
- Possui construtores específicos na linguagem para lidar com coleções. Isto te poupa MUITO tempo e não entendo por que no Java não há este recurso. Ao invés de escrever List<String> lista = new ArrayList<String>(); Em Groovy eu simplesmente escrevo def lista = [] Sim, é simples assim. Tenho um vídeo só sobre este recurso, que também pode ser usado pra facilitar a escrita de testes unitários quando aplicado a hashes.
Porta de entrada para a plataforma Java
Deixe sua arrogância de lado. Ao contrário do que muitos pensam, aprender Java não é uma tarefa simples, especialmente para quem já está acostumado com programação procedural a anos. Em Groovy diversos componentes de sintaxe são opcionais como por exemplo parênteses para chamar funções ou procedimentos, ponto e vírgula e mesmo o formato de script.
É uma sintaxe maravilhosa que por um lado é bastante parecida com o Java e por outro muito próxima de linguagens como Visual Basic. E como você tem acesso a todas as bibliotecas Java, aos poucos vai se acostumando com a plataforma Java EE, e de uma forma muito mais agradável e pragmática.
Groovy Console
Não é exatamente um recurso da linguagem, mas sim um acessório que vêm com esta, mas é uma boa razão. Groovy vêm com um REPL completo que, na minha opinião, é o laboratório perfeito para que possamos experimentar código e mesmo aprender novas APIs. Adivinha? Gravei um vídeo sobre isto também que pode ser acessado neste link.
Criar DSLs com Groovy é muito fácil
Sei que não faz parte do dia a dia da maior parte das pessoas mas faz do meu, então tenho de incluir este motivo. Groovy e Lisp são as melhores linguagens que conheço para criarmos DSLs (Domain Specific Languages, Linguagens Específicas de Domínio). São pequenas linguagens de programação, próximas do mundo do usuário final que possibilitam a este expandir o sistema com facilidade.
É um recurso extremamente poderoso e existe inclusive um livro muito interessante sobre como fazer isto com Groovy cuja leitura recomendo chamado "Groovy for Domain Specific Languages" que li dois anos atrás e cuja resenha publiquei aqui.
Grails
A maior parte das pessoas conhece Groovy por causa do seu killer app: Grails, um framework para desenvolvimento de aplicações web que são executadas na plataforma Java EE. O que posso dizer sobre Grails?
Simples: ele ANIQUILA o tédio da plataforma Java EE e a torna acessível, fácil de usar e pragmática.
Concluindo
Estas não são todas as razões pelas quais você deve adotar Groovy como linguagem de programação, mas são pelo menos as que considero mais importantes.
Groovy resolve um problema fundamental para mim: o da entrada de iniciantes na plataforma Java. Sua sintaxe pragmática torna a transição muito menos traumática. Isto aliado ao fato de existir algo como Grails e Griffon fornecem um outro grande passo: uma entrada ainda mais suave para a plataforma Java EE que mesmo com sua simplificação nas últimas edições ainda é osso duro de roer para os iniciantes.
E sabem o que acho mais legal? Já faz uns seis (talvez sete) anos que brinco e trabalho com Groovy e sempre me surpreendo. E sim: eu sei que sou suspeito pra falar. E você? Já experimentou Groovy? O que achou?
Posted on June 18, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.