O ator Christopher Walken uma vez contou uma piada no Saturday Night Live, na qual ele declarou que precisava de mais "chocalho" para matar sua "febre". Na mesma linha, o time do Groovy certamente ouviu o pedidos por mais Grooby e recentemente liberou a versão 1.6 de sua premiada linguagem. Há um conjunto de novas funcionalidades mencionadas no release incluindo,
- grandes melhorias na performance de runtime
- multipla atribuições - return opcional em blocos if/else e try/catch
- transformações AST e todas as annotations de transformação como @Singleton, @Lazy, @Immutable, @Delegate e cia
- o módulo e sistema de dependências Grape e sua transformação @Grab
- várias melhorias no Swing builder, graças ao time do Swing/Griffon (http://griffon.codehaus.org)
- assim como várias melhorias no console Swing
- a integração do JMX builder
- engine de scripting JSR-223 embutida
- várias melhorias de metaprogramação, como a DSL EMC, metaclasses por instâncias mesmo para POJOs e mixns de runtime
Um dos focos primários neste release foi sobre performance e o time do Groovy alega ter alcançado melhorias significantes variando de 150% a 460%. Outra funcionalidade incluida neste release foi a integração oficial do JMX builder, que é apenas mais um exemplo dos esforços da comunidade para ajudar a melhorar o Groovy.
Abaixo estão alguns exemplos de várias das novas funcionalidades, incluindo atribuições múltiplas e transformações AST.
// as properties desta classe são imutáveis uma vez que o objeto seja construído
@Immutable final class ServerConfig {
String url
int port
}
def getServerInfo() {
['http://home.net', 8080]
}
// tentativa de definir uma propriedade em um objeto Immutable
def setUrl(config, newUrl) {
try {
config.url = newUrl
}
catch (ReadOnlyPropertyException ex) {
ex
}
}
// atribuiçào múltipla
def (url, port) = getServerInfo()
assert url == 'http://home.net'
assert port == 8080
def config = new ServerConfig(url, port)
assert config.url == url
assert config.port == port
// tentativa de mudaar uma property de um objeto Immutable
def result = setUrl(config, 'www.google.com')
// verifica se a alteração falhou
assert result instanceof ReadOnlyPropertyException
O exemplo acima mostra como a transformação @Immutable oferece uma forma simples de criar um objeto read-only. O exemplo também pode demonstrar o uso da nova "atribuição múltipla". Para mais informações sobre as transformações AST você pode visitar o guia do usuário do Groovy. Atualmente a sessão só cobre a transformação @Immutable.
Agora que você deu uma rápida olhada no que o Groovy 1.6 tem pra oferecer, confira O que há de novo no Groovy 1.6, um artigo mais profundo sobre o Groovy 1.6 escrito para a InfoQ pelo Gerente de Projetos do Groovy, Guillaume LaForge. Guillaume cobre cada uma das novas funcionalidades e oferece vários exemplos de código que ajudam a esclarecer todas as novas capacidades.