{:br}
Groovy - Introdução
O Groovy é uma linguagem dinâmica de script criada para ser executada na plataforma Java, e não é necessariamente um concorrente do Java mas sim um complemento que torna a plataforma ainda mais forte. Além do beneficio de ser uma linguagem de Script e não precisar ser pre-compilado par que seja executado o Groovy ainda conta com o beneficio de ser completamente integrado com a plataforma Java, isto significa que o seu script pode ter acesso ao escopo interno do sistema Java.
Onde Utilizar ?
Existem situações onde precisamos montar lógica em tempo de execução, o java tem recursos muito bons para trabalhar com reflection, mas quando não é suficiente sentimos falta do bom JavaScript.
Uma das situações onde estes recursos podem ajudar é quando precisamos dar ao usuário final a possibilidade de definir as regras de negocio dinamicamente:
- O clientes deve receber um desconto quando comprar um determinada combinação de produtos.
- Critério de aprovação de um aluno: "Deve ter uma média maior que 5.5 e ter uma frequência de 70%"
- O 500º cliente do dia recebe um desconto especial.
Estes são apenas alguns dos muitos exemplos de regras de negocio que podem mudar de um dia para o outro, e para que nao precisemos criar parametrizações monstruosas ou ter que publicar uma nova versao da aplicação a cada dia podemos deixar estas regras nas mãos dos gestores e quando eles acharem pertinente eles mesmos pode editar as regras como se fosse uma fórmula do Excel.
O Código
package br.com.edgardleal.groovy; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyCodeSource; import groovy.lang.GroovyObject; /** * * * @author Edgard Leal * @since 22/04/2013 */ public class Executor { Class classe; GroovyClassLoader loader; final String executorClass = "class Executor{ %1$s public String eval(){return %2$s;}}"; public Executor() { } public void loadClass(String code) { loader = new GroovyClassLoader(getClass().getClassLoader()); GroovyCodeSource source = new GroovyCodeSource(code, "Executor", "/"); classe = loader.parseClass(source); } public GroovyObject getObject(String code) throws InstantiationException, IllegalAccessException { if (classe == null) loadClass(code); return (GroovyObject) classe.newInstance(); } public String eval(String code) throws InstantiationException, IllegalAccessException { return eval(code); } public String eval(String code, String variables) throws InstantiationException, IllegalAccessException { return getObject(String.format(executorClass, variables, code)) .invokeMethod("eval", new Object[0]).toString(); } public static void main(String[] args) throws InstantiationException, IllegalAccessException { System.out.println(String.format("%1$s", new Executor().eval("2+x", "int x = 15;"))); } }
Site oficial: Groovy{:}{:en}
Groovy
Groovy is a dynamic scripting language designed to run on the Java platform, and is not necessarily a competitor to Java but a complement that makes even stronger platform. Besides the benefit of being a Script language and does not need to be pre-compiled couple that runs the Groovy also has the benefit of being fully integrated with the Java platform, this means that your script can have access to the internal scope of the system Java.
Where I should use this ?
There are situations where we need to assemble logic at run time, the Java has very good resources to work with reflection, but when it is not enough we miss the good JavaScript.
One of the situations where these resources can help is when we need to give the end user the ability to define business rules dynamically:
- The client must receive a discount when buying a certain product mix.
- Criteria for approval of a student: "It must have an average greater than 5.5 and have a frequency of 70%"
- The day of the 500th customer gets a special discount.
The Code
package br.com.edgardleal.groovy; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyCodeSource; import groovy.lang.GroovyObject; /** * * * @author Edgard Leal * @since 22/04/2013 */ public class Executor { Class classe; GroovyClassLoader loader; final String executorClass = "class Executor{ %1$s public String eval(){return %2$s;}}"; public Executor() { } public void loadClass(String code) { loader = new GroovyClassLoader(getClass().getClassLoader()); GroovyCodeSource source = new GroovyCodeSource(code, "Executor", "/"); classe = loader.parseClass(source); } public GroovyObject getObject(String code) throws InstantiationException, IllegalAccessException { if (classe == null) loadClass(code); return (GroovyObject) classe.newInstance(); } public String eval(String code) throws InstantiationException, IllegalAccessException { return eval(code); } public String eval(String code, String variables) throws InstantiationException, IllegalAccessException { return getObject(String.format(executorClass, variables, code)) .invokeMethod("eval", new Object[0]).toString(); } public static void main(String[] args) throws InstantiationException, IllegalAccessException { System.out.println(String.format("%1$s", new Executor().eval("2+x", "int x = 15;"))); } }
Official Site: Groovy{:}