# Groovy

Groovy é uma linguagem de programação orientada a objetos desenvolvida para a plataforma Java como alternativa à linguagem de programação Java. Groovy possui características de Python, Ruby e Smalltalk.
Groovy utiliza uma sintaxe similar à de Java, é compilada dinamicamente para bytecode Java, e integra-se transparentemente com outros códigos e bibliotecas Java.
Groovy está atualmente em processo de padronização através do Java Community Process ( JSR 241 ).
Groovy possui algumas características não presentes no Java padrão:
* Tipagem estática e tipagem dinâmica
* Sintaxe nativa para listas, arrays associativos, vetores, e expressões regulares
* Clausuras
* Sobrecarga de operadores

## História

James Strachan falou sobre o desenvolvimento do Groovy pela primeira vez em seu blog em Agosto de 2003. Em Março de 2004, Groovy foi enviado ao Java Community Process(JCP) como JSR 241 e aceito. Diversas versões foram lançadas entre 2004 e 2006. Depois que o processo de padronização atráves do JCP começou, a numeração de versão mudou, e uma versão chamada "1.0" foi lançada em 2 de Janeiro de 2007. Depois de vários betas numerados como 1.1, em 7 de Dezembro de 2007, Groovy 1.1 Final foi lançado e imediatamente renumerado como Groovy 1.5 para refletir as várias mudanças que foram feitas.
Em 2007, Groovy ganhou o primeiro lugar no prêmio de inovação JAX 2007. Em 2008, Grails, uma Framework para aplicações web Groovy, ganhou o segundo lugar no prêmio de inovação JAX 2008.
Em Novembro de 2008, SpringSource adquiriu a empresa responsável pelo Groovy and Grails(G2One). Em Agosto de 2009, VMware adquiriu a SpringSource.
Em Abril de 2012, após 8 anos de inatividade, o status do JSR 241 mudou para inativo.
Strachan havia deixado o projeto silenciosamente um ano antes do lançamento do Groovy 1.0 em 2007.
Em 2 de Julho de 2012, Groovy 2.0 foi lançado, nas quais, entre outras características, adicionou compilação estática e verificação estática de tipagem.
Groovy graduou da incubadora Apache e se tornou um top-level project(TLP) em Novembro de 2015.

## GroovyC

Groovyc é a ferramenta de linha de comando do compilador Groovy. Ele permite que você compile fontes Groovy em bytecode. Ele desempenha o mesmo papel que javac no mundo Java. A maneira mais fácil de compilar um script ou classe Groovy é executar o seguinte comando:
Isso produzirá um arquivo MinhaClasse.class (bem como outros arquivos .class, dependendo do conteúdo da fonte).

## Produção de JSON

Groovy vem com suporte integrado para conversão entre objetos Groovy e JSON. As classes dedicadas à serialização e análise JSON são encontradas no pacote groovy.json.
* JsonSlurper é uma classe que analisa texto JSON ou conteúdo de leitor em objetos Groovy, e também em estruturas como mapas, listas e tipos primitivos como Integer, Double, Boolean e String. A classe vem com vários métodos de análise sobrecarregados, além de alguns métodos especiais, como parseText, parseFile e outros.

## Funcionalidades

Apesar de ser inspirada e ter diversas funcionalidades de Java, Groovy não é apenas uma linguagem de script. pode ser compilada, gerando bytecodes Java, ou seja, um arquivo de código fonte Groovy pode virar um arquivo .class, recurso não encontrado em JRuby por exemplo. Desta forma, a única coisa necessária para o programador rodar códigos Groovy no ambiente de produção, é a máquina virtual Java e o jar com o runtime e API`s do Groovy.
Ele é totalmente integrado a Java no nível mais baixo. Se instanciado um objeto tipo Date em Groovy, esse nada mais é do que uma instância de Java.util.Date. E tudo funciona de forma transparente, já que debaixo dos panos, tudo é bytecode Java.
Groovy é escolhido muitas vezes pois sua sintaxe é mais simples e enxuta do que Java, mesmo não sendo Java e possuindo recursos poderosos como closures, que não são encontradas na linguagem Java.

## Utilização

Muitos desenvolvedores utilizam Groovy em suas aplicações Java, como extensão da linguagem, para escrever regras de negócio, facilitando a customização para diferentes clientes.
Para cada caso de uso baseado no Java, os desenvolvedores não precisam de todas as capacidades dinâmicas oferecidas pela linguagem. Geralmente esperam que o compilador Groovy ofereça comportamento semelhante ao dado pelo javac. Os desenvolvedores buscam erros de compilação, para casos de digitação incorreta de nomes de variáveis e métodos, atribuições incorretas etc. Por isso, o Groovy 2.0 passou a suportar a verificação estática de tipos.

## Dialetos

Existe uma implementação alternativa do Groovy:
* O Grooscript converte o código Groovy em código JavaScript. Embora o Grooscript tenha algumas limitações em comparação com o Apache Groovy, ele pode usar classes de domínio no servidor e no cliente. É fornecido suporte de plug-in para Grails versão 3.0, bem como conversões de código online.

## Suporte de IDEs

Muitas IDEs e editores de texto suportam Groovy:
* Android Studio, IDE usada para desenvolver aplicativos Android
* Editor Atom
* Eclipse, atráves do Groovy-Eclipse
* Emacs
* IntelliJ IDEA, Community Edition, Grails/Griffon somente na Ultimate Edition
* JDeveloper, para uso com a Oracle ADF
* jEdit, um editor de texto avançado para a Plataforma Java
* Kate, um editor de texto avançado para KDE tem suporte para Groovy e mais de 200 outros tipos de formato de arquivo
* NetBeans, desde a versão 6.5
* Notepad++, um editor de texto avançado para Microsoft Windows
* Sublime Text 2, um editor de texto multiplataforma
* TextMate
* Visual Studio Code
* UltraEdit, um editor de propósito geral para programas