Groovy & Grails Arian Pasquali
Arian Pasquali 24 anos eu Formado em Sistemas de Informação Java, Objective-C, Flex, Groovy SCJP, SCJA, ACE 6 anos de Java
Orientação a Objetos Plataforma Multi-plataforma Garbage Collector Interplanetária Máquina virtual Java Community Process Just-in-time compiler
Java é fácil?
é simples import java.io.*; class FileRead { public static void main(string args[]) { try{ // Open the file that is the first // command line parameter FileInputStream fstream = new FileInputStream("textfile.txt"); // Get the object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strline; //Read File Line By Line while ((strline = br.readline())!= null) { // Print the content on the console System.out.println (strline); } //Close the input stream in.close(); }catch (Exception e){//catch exception if any System.err.println("Error: " + e.getmessage()); } } }
Java como linguagem Força Orientação a Objetos Não dá pra fazer script Fortemente tipada Não suporta programação funcional Verbose syntax Difícil de aprender A evolução da linguagem é lenta
linguagens dinâmicas ganhando popularidade Python Ruby
Java como plataforma Máquina virtual Gestão de ambiente Segurança Performance Mão de obra
... Linguagens portadas Ruby -> JRuby Python -> Jython Lisp -> Jatha Erlang -> Erjang JavaScript -> Rhino Lua -> LuaJ PHP -> Caucho Quercus pra JVM
mais alternativas?
Groovy extends Java é Java com super poderes
Groovy Linguagem dinâmica baseada em Java que roda na JVM Com mais recursos Syntax mais simples MOP - Meta Object Protocol Tipagem dinâmica opcional Clojures DSLs etc, etc, etc
Curva de aprendizado Baseado no Java Baixa curva de aprendizado para desenvolvedores Java/ Ruby/Python Integração transparente com qualquer código Java existente
Interoperabilidade
Compilado file.groovy file.java bytecode bytecode The Java Virtual Machine Compilada. Não interpretada.
Uma classe.java Uma classe em Java public class HelloWorld { private String name; } public String getname() { return name; } public void setname(string message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(string[] args) { HelloWorld hello = new HelloWorld(); hello.setname("grooooooovy"); System.out.println(hello.message()); }
Uma classe.groovy Uma classe em Java public class HelloWorld { private String name; } public String getname() { return name; } public void setname(string message) { this.name = message; } public String message() { return "Hello World of "+this.name; } public static void main(string[] args) { HelloWorld hello = new HelloWorld(); hello.setname("grooooooovy"); System.out.println(hello.message()); }
Se você já programa em Java Você já programa em Groovy
A mesma classe a mesma classe em groovy em Groovy class HelloWorld { String name def message() { "Hello World of $name" } } def hello = new HelloWorld(name:"Grooovy") println hello.message()
Tipos dinâmicos usando def Auto getters and setters ; no final da linha é opcional return é opcional () é opcional Tudo em Groovy é public a não ser que você informe
Lists e Maps old way groovy way
Lists e Maps
Lists e Maps
Lists e Maps
GString
Clojures {Bloco de código ou ponteiro para um método}
Operadores
Operator overloading
Elvis Operator old way groovy way
Safe Navigation Operator old way groovy way
Meta-Programming {capacidade de adicionar comportamento em tempo de execução}
Meta-Programming {é possível interceptar chamada de métodos e simular AOP}
Meta-Programming mas e se o método não existir?
Vamos aprender Java? http://www.flickr.com/photos/oskay/472097903/
Instalação Download JDK Download Groovy binaries http://groovy.codehaus.org/download
Instalação JAVA_HOME (Java 1.5 ou >) GROOVY_HOME set PATH para testar digite no terminal groovy -v
Instalação groovysh - comand line client groovyconsole - gui client
Groovy Console
Java Beans mais simples
Java Beans
Java Beans Nos casos mais típicos, normalmente a nossa classe ficaria assim
Leitura de arquivos
Lendo arquivos em Java
import java.io.*; class FileRead { public static void main(string args[]) { try{ // Open the file that is the first // command line parameter FileInputStream fstream = new FileInputStream("textfile.txt"); // Get the object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strline; //Read File Line By Line while ((strline = br.readline())!= null) { // Print the content on the console System.out.println (strline); } //Close the input stream in.close(); }catch (Exception e){//catch exception if any System.err.println("Error: " + e.getmessage()); } } }
Lendo arquivos em Groovy
def file = new File("textfile.txt") file.eachline { line -> println line }
Escrevendo arquivos
Lendo um diretório
Aplicações Scripting (builds, banco de dados, geração de código) Domain Specific Languages Externalização de regra de negócio Ex: Fórmulas matemáticas Web
Então você quer usar groovy?
Mais um framework web? Struts VRaptor Cocoon Wicket Tapestry JSF etc, etc e etc...
Princípios e mantras Full-stack Convenções no lugar de configurações Inspirado no Ruby on Rails, Django e TurboGears Não reinventar a roda Hibernate, Spring, JEE Ser o mais simples possível Reduzindo complexidade Pra Aumentar produtividade Java
Full-stack web framework Mapeamento Objeto Relacional basedado no Hibernate Camada de View - GSP, SiteMesh Injeção de Dependiencia Camada de Controller baseado no SpringMVC Scaffolding (CRUD) Internacionalização (i18n) Webserver embutido - tomcat ou jetty Build (gerenciamento de dependências) - Maven, Ivy Gerenciamento de configurações por ambiente Testes - junit
Grails stack
grails create-app udesc
um projeto grails
Configuração por ambiente
MVC Model View Controller
Domain model validação eventos
CRUD
Querying
Dynamic Finders
Controllers Responsável por tratar os requests Renderiza ou prepara a resposta
Controllers Negaciação de conteúdo Facilita construção de APIs REST
Services Não coloque regras de negócio dentro de Controllers. Use Services Transacionais por default
+ de 680 Plugins
Ferramentas Eclipse (SpringSource) Netbeans InteliJIDEA (melhor opção, porém é paga) Editor de textos : TextMate, vim, etc
duvidas?
arianpasquali.com about.me/arianpasquali arian.pasquali@informant.com.br