SlideShare uma empresa Scribd logo
1 de 71
Baixar para ler offline
Groovy & Grails
Desenvolvimento ágil para
    plataforma Java




       Luís Bruno P. Nascimento
         luisbrunu@gmail.com
Enucomp 2010
●   Groovy e Grails – Parte I




Introdução ao Groovy
O Projeto Groovy
●   Tudo começou em 29 de
    Agosto de 2003, com uma
    publicação no blog de
    James       Strachan,     o
    primeiro artigo sobre o que
    seria o groovy.
O Projeto Groovy

  Segundo James:

“Minha idéia inicial é fazer uma pequena linguagem
dinâmica, que seja compilada diretamente em
classes Java e que tenha toda a produtividade e
elegante encontrada em Ruby e Python”
O Projeto Groovy
● James uniu-se com Bob McWhirter, e
juntos, em 2003 fundaram oficialmente o
projeto Groovy.
● Em 2004, fundação do GroovyOne;



●   Mais desenvolvedores se uniram ao projeto

              Entre eles Guillaume Laforge, hoje é o
              gerente oficial do projeto Groovy e líder do
              Expert Group que padroniza Groovy.
Groovy Hoje
●   Linguagem com ascenção mais rápida no
    indice do Tiobe Index;
●   Do limbo para o 38° lugar entre 200 linguagens
    em 2 anos e meio de vida;
    ●   Hoje ocupa a 44° posição;
    ●   http://www.tiobe.com/index.php/content/
        paperinfo/tpci/index.html
    ●   1° lugar entre as linguagens da JVM.
Alternativas ao Groovy
●   Existem cerca de 240 linguagens compatíveis à
    JVM;
●   Funcionam junto ao código Java ou são
    compiladas para formar bytecodes;
●   Mais sobre o assunto:
    http://www.is-research.de/info/vmlanguages
Alternativas ao Groovy
Groovy ou JRuby
●   Sintax do Groovy bem similar à Java;
●   Possui todas as vantagens do Ruby;
●   Interpolaridade entre Groovy e Java;
    ●   Arquivos .groovy compilados tornam-se .class;
    ●   Se trocar a extensão .java para .groovy funciona
        exatamente como o tal;
Tratamento com a JVM


file.java                     file.groovy




bytecode                        bytecode



            Máquina Virtual Java
Introdução ao Groovy
●   Linguagem ágil e dinâmica para java;
●   Muitos recursos foram inspirados em linguagens
    como Ruby, Python e Smalltalk;
●   Sintaxe simples, enxuta e similar à linguagem
    Java;
●   Interpretada ou Compilada para bytecode;
●   Linguagem de Scripts;
●   Open Source;
Introdução ao Groovy
●   Totalmente OO;
    ●   Não há tipos primitivos;
    ●   TUDO é objetos;
        –   O número 1 é um objeto;
        –   1.class >> java.lang.Integer;
    ●


●   Meta-Programação;
    ●   Adicionar funcionalidades em tempo de execução.
        –   Criar um novo comportamento para classe String.
Instalação
●   Pré-requisitos:
    ●   JDK - http://java.sun.com/javase/downloads
●   1° Passo: Download do Groovy:
    ●   GDK - http://groovy.codehaus.org/Download
    ●   Descompactar os binários do Groovy - Qualquer diretório;
●   2° Passo: Definir as variáveis de ambiente e o PATH:
    ●   Variáveis de Ambiente
        –   GROOVY_HOME
    ●   Definir o PATH:
        –   GROOVY_HOME/bin
Instalação no Windows
●   Definir variáveis de ambiente:
    ●   Vá em Painel de Controle >> Propriedades do
        Sistema >> Vá na aba Avançado, e clique no botão
        Variáveis de Ambiente.
        –   Em Variáveis de usuário, crie uma nova com:
             ●   Variável: GROOVY_HOME
             ●   Valor: C:groovy-1.3.4
        –   Em Variáveis do sistema, edite a variável PATH:
             ●   Adicione no final ;C:groovy-1.3.4bin
Instalação no Windows
Instalação no Linux
●   Usando um editor de texto, abra o arquivo
    /etc/environment, e adicione os segintes
    valores:
        –   JAVA_HOME = "/usr/lib/jvm/java-6-sun"
        –   GROOVY_HOME = "/opt/groovy-1.7.5"
    ●   Adicione ao fim da linha PATH:
        –   /usr/lib/jvm/java-6-sun/bin
        –   /opt/groovy-1.7.5/bin
Groovy - Características
●   Alguns Importes já implícitos;
    ●   java.io.*
    ●   java.lang.*
    ●   java.math.BigDecimal
    ●   java.math.BigInteger
    ●   java.net.*
    ●   java.util.*
    ●   groovy.lang.*
    ●   groovy.util.*
Groovy - Características
●   Ponto e vírgula e comando return são opcionais;
●   Métodos e Classes são public por default, por isso
    também é opcional o uso dos modificadores;
●   Pode ser omitido o tipo das variáveis, atributos, assim
    como o tipo de retorno dos métodos.
●   Parênteses opcionais em chamadas de métodos com
    um parâmetro.

    print "hello"                //==>hello
    5.plus 5                     //==>10
    'Bruno'.concat ' Nascimento' //==> Bruno Nascimento
Ferramentas Groovy
>>groovysh
      ●   Groovy shell;
      ●   Executa um código iterativamente.
Groovy Shell
------------------------------------------------------------------

groovy:000> print 'Olá, eu sou Groovy!’
hello, world===> null
groovy:000> System.out.println("Olá, sou do Java!");
hello, world===> null
Ferramentas Groovy
>>groovyConsole

                  ● Console com interface
                  gráfica escrito em Groovy pra
                  executar códigos
                  instantaneamente.

                  ● Classes, instancias,
                  methodos soltos, códigos em
                  java...
Ferramentas Groovy
>>groovy
●   Usado para executar programas e scripts em Groovy;
●   Roda programas em Groovy na forma de arquivos,
    passando o nome do arquivo.



//programa.groovy
println "Hello, Bruno!"

groovy:000>groovy programa.groovy
groovy:000>Hello, Bruno!
Ferramentas Groovy
Suporte às IDEs
  –   Netbeans – Groovy e Grails nativo;
  –   Eclipse plug-in
Eclipse + Groovy
●   Vá no site:
    ●   http://groovy.codehaus.org/Eclipse+Plugin
●   Escolha a sua versão do eclipse e pegue a url
    correspondente;
●   Adicione em Help >> Install New Software
●   Colar a url e fazer o download
Operadores
●   Aritméticos: +, -, *, /, %, **, ... etc
●   Comparação: >, <, >=,==, !=,<=> … etc
●   Atribuição: =, +=, +=, <<, <<=, ... etc.
●   Lógicos: &&, ||, ! … etc
●   Ternário: a == 2 ? “Dois” : “Outro”
●   Elvis Operator: ?:
●   Safe Navigation Operator: ?.
Operadores
●   (<=>)
    ●    Operador de comparação que retorna -1, 0 ou 1 se
         for menor, igual ou maior que seu argumento.
●   (?:) - Elvis Operator
        String a;
        a?:"A variável a é nula" //em Groovy

        String a; //em Java
        a != null ? a : "A variável a é nula";

    ●    Se a variável não for nula, retorna ela mesma,
         senão, retorna a String.
Operadores
●   (?.) - Safe Navigation Operator
    ●   Acessa um método ou propriedade se o objeto não
        for nulo.

        obj?.facaAlgo() //em Groovy

         //em Java
         if(obj != null){
            obj.facaAlgo();
         }
Variáveis
●   São objetos das classes das quais foram
    tipadas;
    ●   Podem ser tipadas dinamicamente através da
        palavra def;
          String str = 'String tipada'
          def s = 'String dinâmica'

    ●   Atribuição Múltipla:
          def (a,b,c) = [2, 4, 6]
          print a     //===> 2
Números
●   Em Groovy, os números são tipados através do
    seu tamanho:
    1.class                  //java.lang.Integer
    1.class.superclass       //java.lang.Number

    1000000000.class         //java.lang.Long
    (100**100).class         //java.math.BigInteger

    ●   Groovy suporta números de tamanhos imensos. Os
        números da classe BigInteger se restringem apenas à
        memória e ao processador da máquina.
Números
●   Alguns métodos da classe Number:
    ●   times(Closure closure)
          5.times {print 'k'}
          //kkkkk
    ●   upto(Number to, Closure closure)
          1.upto 5, {print it }
          //12345
    ●   step(Number to, Number stepNumber, Closure c)
          0.step( 10, 2 ) {print it}
          //2,4,6,8,10
Strings
●   String é um conjunto de caracteres.
●   Strings Groovy são completamente
    MUTÁVEIS.
●   Pode ser delimitado por aspas 'simples' ou
    "duplas"
●   Pode ocupar uma ou várias linhas.
●   Pode ser injetada a ela operações, variáveis...
●   Métodos destrutivos e não destrutivos
Strings
●   Strings
        'String de aspas simples'
        "Olá, sou uma 'String'!"
●   GStrings – Groovy Strings
    ●   Strings interpoladas. Permitem adicionar pedaços de
        código dentro delas.
          "1 + 1 = ${1+1}" // 1 + 1 = 2
    ●   Strings com múltiplas linhas.
          """String de
             Multiplas
             linhas"""
Strings
●   Strings como Arrays

    s = 'Bem vindos ao Enucomp'
    s.getAt(1)    /* e */
    s[1]          /* e */
    s[0,20]       /* Bp */
    s[4..9]       /* vindos */
Strings
●   Brincando com os Operadores
    s = 'Bem vindos ao Enucomp'

    s + ' com Groovy'    /*Bem vindos ao Enucomp com
    Groovy*/

    s - 'Enucomp' + 'Groovy'   /*Bem vindos ao Groovy*/

    s = 'k'
    s * 3      /* kkk */
●   Obs.: Os operadores são métodos não-
    destrutivos.
Strings
●   Outros métodos interessantes:

     s = 'hello, Groovy'

     s.capitalize()        /*Hello, Groovy*/
     s.center(15)          /* hello, Groovy */
     s.padLeft(16, '-')    /*---hello, Groovy*/
     s.padRight(16, '-')   /*hello, Groovy---*/
     s.reverse()           /*yvoorG ,olleh*/

     ....
Strings
●   Interpolação de valores em Strings;
    ●   Possível apenas em Strings com aspas duplas.
        def nome = 'João'
        //===>João

        print "Olá, ${nome}, bem vindo ao curso!"
        //===>Olá, João, bem vindo ao curso!'
Coleções
●   List – Coleção de objetos;
    def numeros = [1, 2, 3.5]
    def string = ["1", '2', "3"]
    def tudo = [10, "50", """Hello"""]

    def list = [numeros, string, tudo]


    list.each{println it}

    [1, 2, 3.5]
    [1, 2, 3]
    [1, 2, 3]
Coleções
●   List - Alguns métodos úteis:
    def list = [1,2,3,9,5]
    list.each {print it } //123495
    list.reverse()        //[5,9,3,2,1]
    list.putAt(3,4)       //[1,2,3,4,5]
    list << 6             //[1,2,3,9,5,6]
    list.pop()            //[1,2,3,9,5]

    list + 10          //1,2,3,4,9,5,10
    list - 9           //1,2,3,4,5
Coleções
●   Range
    ●   Representa um intervalo de valores;
         def range = (1..4)

         range.each {print "$it "}
         //1 2 3 4===> 1..4

         ('a'..'c').each {print "$it "}
          //a b c ===> a..c

         for (i in 1..10) {println i}
Coleções
●   Map
    ●    O mesmo que array associativo, dicionários ou
         hashes;
    ●    Cada entrada é composta por uma chave e um
         valor;
def frameworks = [groovy: "Grails", ruby: "Rails"]
def map = [a:(1..4), 10:"Dez"]

        print framework.groovy //===>Grails
        print map.a            //===>1..4
        print map[10]          //===>Dez
Receber do teclado
●   Para brincar recebendo valores do usuário em
    Groovy, use isso:
     System.in.withReader {
        print "Digite algo: "
        valor = it.readLine()
        println "Você me disse: ${valor.toUpperCase()}"
     }
Praticando...
1. Imprimir uma String na vertical;
2. Imprimir uma String em formato de escada;
3. Receber uma linguagem, retorna uma
  framework;
4. Dado um determinado vetor, faça:
  ●   Some todos os elementos;
  ●   Mostre o maior e o meno elemento;
  ●   Mostre os elementos invertidos;
  ●   Ordene todos os elementos;
Estruturas de Controle
●   O que é verdadeiro em Groovy?
    ●   Objetos não-nulos;
    ●   Números diferentes de 0;
    ●   Strings, GStrings, coleções não-vazias;
        assert    !'';                assert 'Olá'
        assert    !0;                 assert 50
        assert    ![];                assert [2,'a']
        assert    !false;            assert true
        assert    !null;             assert new Object()

        –   Método assert é um método para testes unitários. Se
            retornar algo false, gera uma exceção.
Estruturas de Controle
●   Estruturas de decisão:
    ●   If else
          If(10 > 5){
            print 'Groovy'
          }
          else{
            print 'Java'
          }
    ●   Operador condicional - ?:

          def retorno = (1==1) ? "Iguais" : "Diferentes"
Estruturas de Controle
●   Switch
    switch(ling) {
        case 'Ruby'     :   println   'Rails'    ;break
        case 'Groovy'   :   println   'Grails'   ;break
        case 'PHP'      :   println   'Cake'     ;break
        default         :   println   'Outra'    ;break
    }


    if(ling.isCase('Ruby')) println 'Rails'
    else if (ling.isCase('Groovy')) println 'Grails'
    else if (ling.isCase('PHP')) println'Cake'
    else 'Outra'

    //Rails
    //Rails
Estruturas de Controle
●   Switch
    ●   Em Groovy, o switch suporta vários tipos, e não só
        chars.
           switch (10) {
             case 0           : assert   false   ;break
             case 0..9        : assert   false   ;break
             case [8,9,11]    : assert   false   ;break
             case Float       : assert   false   ;break
             case {it%3 == 0} : assert   false   ;break
             case ~/../       : assert   true    ;break
             default          : assert   false   ;break
            }
Estruturas de Controle
●   while

    def list = [1,2,3]
    while (list) {
      list.remove(0)
    }
    assert list == []


    while (list.size() < 3)
      list << list.size()+1
    assert list == [1,2,3]
Estruturas de Controle
●   for
     for (variable in iterable) { body }

     def store = ''
     for (String i in 'a'..'c')   store += i
     assert store == 'abc'


     def j = 0
     for (i in 0..10) {
       j += i
     }
     print j     //55
Exceções
●   O tratamento de exceções é igual ao do Java.
    A única diferença em termos de exceção é que
    no Groovy é opcional colocar o throws na
    assinatura do método, tanto para exceções
    checadas quanto em não-checadas;
    ●   Com isso, podemos escolher como e quando tratar
        essas exceções.
Exceções

def myMethod() {
   'string'.toLong()
}

def log = []
try {
   myMethod()
} catch (Exception e) {
   log << e.toString()
} finally {
   log << 'finally'
}

log.each{println it}
Métodos
●   Em Groovy, todo método retorna alguma coisa.
    Quando nenhum valor é explicitamente
    mostrado, ele retorna null.
●   O return opcional

    def hello(nome){
      println 'Hello, meu nome é: ${nome}'
    }

    hello('Bruno')   //Hello, meu nome é: Bruno
    ou
    hello 'Bruno'    //Hello, meu nome é: Bruno
Métodos
●   Podemos declarar métodos com parâmetros
    com valores default
     def soma(a,b = 2){ println a + b }
     soma 2      //4
     soma 2,3    //5
●   Métodos com parâmetros opcionais
     int sum(a, Object[] optionals){
       for(o in optionals)
         a+=o
       a
     }
     sum(1) //1
     sum(20, 1, 10, 4) //35
Closures
●   Um bloco de código reutilizável delimitado por chaves.
    ●   Semelhante a uma classe interna;
    ●   Podem ser declarados não só dentro das classes
    ●   Não é executado quando definido, apenas quando for
        chamado;
    ●   Apenas agem como métodos, mas são objetos
        normais(groovy.lang.Closure).
    ●   Para entender melhor esse recurso, acesse:
        http://groovy.codehaus.org/Closures+-+Formal+Definition
Closures
●   Pode conter parâmetros;
●   Modifica variáveis declaradas fora da closure;
●   Invocados pelo método
    ●   call();
    ●   doCall();
    ●   ou simplesmente pela seu nome;
●   Se tiver apenas um parâmetro, não é
    necessário defini-lo, basta usar a palavra
    reservada it para referenciá-lo.
Closures
 Closure cloj1 = {println 'Hello, World!'}
// Sem parâmetro

def cloj2 = { obj -> println "Hello, $obj!"}
// Parâmetro sem tipo definido

def cloj3 = {println "Hello, $it!"}
 // Parâmetro acessado pela palavra-chave 'it'


cloj2.call('Groovy')     //===> Hello, Groovy
cloj3.doCall('Groovy')   //===> Hello, Groovy
cloj3('Groovy')          //===> Hello, Groovy
Closures
●   Outros exemplos:
      def soma = { a, b ->
          print "A soma é: ${a+b}"
      }

      map = ['a':1, 'b':2]
      map.each{ key, value -> map[key] = value * 2 }
      print map   //[a:2, b:4]

      letras = 'a'..'z'
      letrasUpper=[]
      letras.collect (letrasUpper){it * 2 }

      println letras        //[a, b, c, d, ...]
      println letrasUpper   //[aa, bb, cc, ...]
Praticando...
●   Fazer um programinha que receba um número,
     imprima-o o número de vezes que o
    representa de 0 até ele mesmo.
      Entrada: 6
      Saída: 1
             2 2
             3 3   3
             4 4   4 4
             5 5   5 5 5
             6 6   6 6 6 6
Orientação à Objetos
●   Classes e Objetos
    ●   Classes é uma estrutura que abstrai coisas do mundo
        real para o mundo computacional;
    ●   Define o tipo dos objetos;
        –   Se classes fossem formas de bolo, os objetos seriam os
            bolos;
        –   Objetos são instancias das classes;
    ●   Objetos possuem dados em comportamentos;
        –   Os dados são os atributos;
        –   Comportamentos são os métodos;
    ●   1, 50, 999 são instancias da classe Integer;
Orientação à Objetos
●   Classes e Objetos
    ●   “Oi”, 'Groovy', '8' são instancias da classe String;
    ●   Instanciando uma classe:
         p = new Pessoa()
    ●   Para os tipos básicos basta fazer isso:
          s = "String"
          i = 50
          array = [10,20,60]

    ●   Ou do modo brutal...
          i = new Integer(25)
          s = new String('Sou uma String')
Orientação à Objetos
●   Herança:
    ●   Classes tem a capacidade de herdar
        comportamento de outras classes;
    ●   As classes que provêm os comportamentos
        herdados são chamadas de super-classes;
         1.class              //java.lang.Integer
         1.class.superclass   //java.lang.Number

    ●   Para herdar de outras classes usa-se o extends
          class Integer extends Number {
             ...
          }
Meta-Programação
●   MOP – Meta-Object Protocol
●   Mágica da programação;
●   Adicionar comportamento às classes em tempo
    de execução;
    ●   Adicionar métodos às classes;
    ●   Adicionar propriedades;
●   Todas as classes escritas em Groovy herdam
    de Object e implementam a interface
    GroovyObject;
Meta-Programação
●   Meta Classes
    ●   As classes definem o comportamento dos objetos;
    ●   As meta classes definem o comportamento de
        certas classes ou de suas instancias;
         –   De certa forma até as classes são objetos...

        public interface GroovyObject {
          Object invokeMethod(String name, Object args);
          Object getProperty(String property);
          void setProperty(String property, Object newValue);
          MetaClass getMetaClass();
          void setMetaClass(MetaClass metaClass);
        }
Meta-Programação
●   Adicionando um método à classe String
    String.metaClass.digaOla = { lang ->
      if(lang == 'English') println 'Hello'
      else
      if(lang == 'Swedish') println 'Hej'
    }
    'Chamando o diga Olá por uma String'.digaOla('Swedish')

    class Pessoa{
      String nome, sobrenome
    }
    Pessoa.metaClass.getNomeCompleto = {
       nome + ", " + sobrebome }
    println new Pessoa(nome:'groovy',
       sobrenome : 'Grails').getNomeCompleto()
Java Bean
public class HelloWorld {

    private String nome;

    public void setNome(String nome) {
       this.nome = nome;
    }

    public String digaHello(){
       return "Hello " + nome + ".";
    }

    public static void main(String[] args) {
       HelloWorld hw = new HelloWorld();
       hw.setNome("Bruno");
       System.out.println(hw.digaHello());
    }
}
Em Groovy
public class HelloWorld {

    private String nome;

    public void setNome(String nome) {
       this.nome = nome;
    }

    public String digaHello(){
       return "Hello " + nome + ".";
    }

    public static void main(String[] args) {
       HelloWorld hw = new HelloWorld();
       hw.setNome("Bruno");
       System.out.println(hw.digaHello());
    }
}
Groovy Bean
●   Por defaulf as classes são public;
●   Métodos modificadores dos atributos são
    gerados dinamicamente;
●   Não é necessário criar um método construtor:

       p = new Pessoa(nome:'Bruno')
Groovy Bean
class HelloWorld {           Getters e Setters gerados
                             automaticamente
    String nome

    String digaHello(){              Strings Groovy
       "Hello, ${nome}."             (GString)
    }

    static void main(args) {
       def hw = new HelloWorld(nome:"Groovy")
       print hw.digaHello()
    }
}
                                 Parâmetro do construtor
Groovy Bean
class HelloWorld {                ”Duky Typing”
                                  Tipagem dinâmica
  def nome

  def digaHello(){
     "Hello, $nome"
  }
}
print new HelloWorld(nome:"Groovy").digaHello()


                           ”Script” Groovy solto/livre
Totalmente em Groovy
                                 Closure com parâmetro
class HelloWorld {
  def digaHello = {nome-> "Hello ${nome}"}
}
print new HelloWorld().digaHello.call("Bruno")


           Chamada da Closure
● Em todos esses exemplos têm o mesmo resultado:
>>Hello, Bruno
Java vs Groovy
public class HelloWorld {

    private String nome;                         Em java: 18 linhas
    public void setNome(String nome) {
      this.nome = nome;
    }

    public String digaHello(){
      return "Hello " + nome + ".";
    }

    public static void main(String[] args) {
      HelloWorld hw = new HelloWorld();
      hw.setNome("Bruno");
      System.out.println(hw.digaHello());
    }                                                Em Groovy: 4 linhas
}


class HelloWorld {
  def digaHello = {nome-> "Hello ${nome}"}
}
print new HelloWorld().digaHello.call("Bruno")
Referências
●   Groovy in Action;
●   Introduction to Groovy and Grails
    ●   Mohamed Seifeddine
●   Getting Started Guide
    ●   http://groovy.codehaus.org/Getting+Started+Guide
●   Em Busca do Grails
    ●   Fernando Anselmo
●   Groovy Documentation
    ●   Oficial docs
●   Básico do Groovy para quem for aprender Grails
    ●   http://www.itexto.net/devkico/?p=231
Referências
●   Um pouco de Groovy
    ●   Artigo Dev-Media – Java Magazine - Marcelo Castellani
●   Slide curso_ruby do ENUCOMP 2008
    ●   Regis Pires Magalhães

Mais conteúdo relacionado

Mais procurados

Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 

Mais procurados (20)

Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Plano de aula sobre HTML básico
Plano de aula sobre HTML básicoPlano de aula sobre HTML básico
Plano de aula sobre HTML básico
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Introdução ao JavaScript
Introdução ao JavaScriptIntrodução ao JavaScript
Introdução ao JavaScript
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Introdução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoIntrodução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderoso
 
Anatomia de uma entrevista
Anatomia de uma entrevistaAnatomia de uma entrevista
Anatomia de uma entrevista
 
Usabilidade e Navegabilidade
Usabilidade e NavegabilidadeUsabilidade e Navegabilidade
Usabilidade e Navegabilidade
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Curso MySQL #03 - Criando um Banco de Dados MySQL
Curso MySQL #03 - Criando um Banco de Dados MySQLCurso MySQL #03 - Criando um Banco de Dados MySQL
Curso MySQL #03 - Criando um Banco de Dados MySQL
 
[ScrumDay2020] A evolução da responsabilidade em testes
[ScrumDay2020] A evolução da responsabilidade em testes[ScrumDay2020] A evolução da responsabilidade em testes
[ScrumDay2020] A evolução da responsabilidade em testes
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 

Destaque

Destaque (6)

Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java Developers
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java Developers
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Cisco ccna modulo 02
Cisco ccna modulo 02Cisco ccna modulo 02
Cisco ccna modulo 02
 
Groovy for java developers
Groovy for java developersGroovy for java developers
Groovy for java developers
 

Semelhante a Curso de Groovy

Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
Sérgio Souza Costa
 

Semelhante a Curso de Groovy (20)

Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividade
 
Template method pattern
Template method patternTemplate method pattern
Template method pattern
 
Usando QUnit para testes unitários em JavaScript
Usando QUnit para testes unitários em JavaScriptUsando QUnit para testes unitários em JavaScript
Usando QUnit para testes unitários em JavaScript
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infoway
 
Qual linguagem escolher?
Qual linguagem escolher?Qual linguagem escolher?
Qual linguagem escolher?
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
Groovy: graxa nas engrenagens de Java
Groovy: graxa nas engrenagens de JavaGroovy: graxa nas engrenagens de Java
Groovy: graxa nas engrenagens de Java
 
Tutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jqueryTutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jquery
 
Groovy
GroovyGroovy
Groovy
 
Utilize Groovy nos seus futuros projetos
Utilize Groovy nos seus futuros projetosUtilize Groovy nos seus futuros projetos
Utilize Groovy nos seus futuros projetos
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Seminário sobre GO
Seminário sobre GOSeminário sobre GO
Seminário sobre GO
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Groovy stack
Groovy stackGroovy stack
Groovy stack
 

Último

Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
rosenilrucks
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
WagnerCamposCEA
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
RavenaSales1
 

Último (20)

Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
praticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médiopraticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médio
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 

Curso de Groovy

  • 1. Groovy & Grails Desenvolvimento ágil para plataforma Java Luís Bruno P. Nascimento luisbrunu@gmail.com
  • 2. Enucomp 2010 ● Groovy e Grails – Parte I Introdução ao Groovy
  • 3. O Projeto Groovy ● Tudo começou em 29 de Agosto de 2003, com uma publicação no blog de James Strachan, o primeiro artigo sobre o que seria o groovy.
  • 4. O Projeto Groovy Segundo James: “Minha idéia inicial é fazer uma pequena linguagem dinâmica, que seja compilada diretamente em classes Java e que tenha toda a produtividade e elegante encontrada em Ruby e Python”
  • 5. O Projeto Groovy ● James uniu-se com Bob McWhirter, e juntos, em 2003 fundaram oficialmente o projeto Groovy. ● Em 2004, fundação do GroovyOne; ● Mais desenvolvedores se uniram ao projeto Entre eles Guillaume Laforge, hoje é o gerente oficial do projeto Groovy e líder do Expert Group que padroniza Groovy.
  • 6. Groovy Hoje ● Linguagem com ascenção mais rápida no indice do Tiobe Index; ● Do limbo para o 38° lugar entre 200 linguagens em 2 anos e meio de vida; ● Hoje ocupa a 44° posição; ● http://www.tiobe.com/index.php/content/ paperinfo/tpci/index.html ● 1° lugar entre as linguagens da JVM.
  • 7. Alternativas ao Groovy ● Existem cerca de 240 linguagens compatíveis à JVM; ● Funcionam junto ao código Java ou são compiladas para formar bytecodes; ● Mais sobre o assunto: http://www.is-research.de/info/vmlanguages
  • 9. Groovy ou JRuby ● Sintax do Groovy bem similar à Java; ● Possui todas as vantagens do Ruby; ● Interpolaridade entre Groovy e Java; ● Arquivos .groovy compilados tornam-se .class; ● Se trocar a extensão .java para .groovy funciona exatamente como o tal;
  • 10. Tratamento com a JVM file.java file.groovy bytecode bytecode Máquina Virtual Java
  • 11. Introdução ao Groovy ● Linguagem ágil e dinâmica para java; ● Muitos recursos foram inspirados em linguagens como Ruby, Python e Smalltalk; ● Sintaxe simples, enxuta e similar à linguagem Java; ● Interpretada ou Compilada para bytecode; ● Linguagem de Scripts; ● Open Source;
  • 12. Introdução ao Groovy ● Totalmente OO; ● Não há tipos primitivos; ● TUDO é objetos; – O número 1 é um objeto; – 1.class >> java.lang.Integer; ● ● Meta-Programação; ● Adicionar funcionalidades em tempo de execução. – Criar um novo comportamento para classe String.
  • 13. Instalação ● Pré-requisitos: ● JDK - http://java.sun.com/javase/downloads ● 1° Passo: Download do Groovy: ● GDK - http://groovy.codehaus.org/Download ● Descompactar os binários do Groovy - Qualquer diretório; ● 2° Passo: Definir as variáveis de ambiente e o PATH: ● Variáveis de Ambiente – GROOVY_HOME ● Definir o PATH: – GROOVY_HOME/bin
  • 14. Instalação no Windows ● Definir variáveis de ambiente: ● Vá em Painel de Controle >> Propriedades do Sistema >> Vá na aba Avançado, e clique no botão Variáveis de Ambiente. – Em Variáveis de usuário, crie uma nova com: ● Variável: GROOVY_HOME ● Valor: C:groovy-1.3.4 – Em Variáveis do sistema, edite a variável PATH: ● Adicione no final ;C:groovy-1.3.4bin
  • 16. Instalação no Linux ● Usando um editor de texto, abra o arquivo /etc/environment, e adicione os segintes valores: – JAVA_HOME = "/usr/lib/jvm/java-6-sun" – GROOVY_HOME = "/opt/groovy-1.7.5" ● Adicione ao fim da linha PATH: – /usr/lib/jvm/java-6-sun/bin – /opt/groovy-1.7.5/bin
  • 17. Groovy - Características ● Alguns Importes já implícitos; ● java.io.* ● java.lang.* ● java.math.BigDecimal ● java.math.BigInteger ● java.net.* ● java.util.* ● groovy.lang.* ● groovy.util.*
  • 18. Groovy - Características ● Ponto e vírgula e comando return são opcionais; ● Métodos e Classes são public por default, por isso também é opcional o uso dos modificadores; ● Pode ser omitido o tipo das variáveis, atributos, assim como o tipo de retorno dos métodos. ● Parênteses opcionais em chamadas de métodos com um parâmetro. print "hello" //==>hello 5.plus 5 //==>10 'Bruno'.concat ' Nascimento' //==> Bruno Nascimento
  • 19. Ferramentas Groovy >>groovysh ● Groovy shell; ● Executa um código iterativamente. Groovy Shell ------------------------------------------------------------------ groovy:000> print 'Olá, eu sou Groovy!’ hello, world===> null groovy:000> System.out.println("Olá, sou do Java!"); hello, world===> null
  • 20. Ferramentas Groovy >>groovyConsole ● Console com interface gráfica escrito em Groovy pra executar códigos instantaneamente. ● Classes, instancias, methodos soltos, códigos em java...
  • 21. Ferramentas Groovy >>groovy ● Usado para executar programas e scripts em Groovy; ● Roda programas em Groovy na forma de arquivos, passando o nome do arquivo. //programa.groovy println "Hello, Bruno!" groovy:000>groovy programa.groovy groovy:000>Hello, Bruno!
  • 22. Ferramentas Groovy Suporte às IDEs – Netbeans – Groovy e Grails nativo; – Eclipse plug-in
  • 23. Eclipse + Groovy ● Vá no site: ● http://groovy.codehaus.org/Eclipse+Plugin ● Escolha a sua versão do eclipse e pegue a url correspondente; ● Adicione em Help >> Install New Software ● Colar a url e fazer o download
  • 24. Operadores ● Aritméticos: +, -, *, /, %, **, ... etc ● Comparação: >, <, >=,==, !=,<=> … etc ● Atribuição: =, +=, +=, <<, <<=, ... etc. ● Lógicos: &&, ||, ! … etc ● Ternário: a == 2 ? “Dois” : “Outro” ● Elvis Operator: ?: ● Safe Navigation Operator: ?.
  • 25. Operadores ● (<=>) ● Operador de comparação que retorna -1, 0 ou 1 se for menor, igual ou maior que seu argumento. ● (?:) - Elvis Operator String a; a?:"A variável a é nula" //em Groovy String a; //em Java a != null ? a : "A variável a é nula"; ● Se a variável não for nula, retorna ela mesma, senão, retorna a String.
  • 26. Operadores ● (?.) - Safe Navigation Operator ● Acessa um método ou propriedade se o objeto não for nulo. obj?.facaAlgo() //em Groovy //em Java if(obj != null){ obj.facaAlgo(); }
  • 27. Variáveis ● São objetos das classes das quais foram tipadas; ● Podem ser tipadas dinamicamente através da palavra def; String str = 'String tipada' def s = 'String dinâmica' ● Atribuição Múltipla: def (a,b,c) = [2, 4, 6] print a //===> 2
  • 28. Números ● Em Groovy, os números são tipados através do seu tamanho: 1.class //java.lang.Integer 1.class.superclass //java.lang.Number 1000000000.class //java.lang.Long (100**100).class //java.math.BigInteger ● Groovy suporta números de tamanhos imensos. Os números da classe BigInteger se restringem apenas à memória e ao processador da máquina.
  • 29. Números ● Alguns métodos da classe Number: ● times(Closure closure) 5.times {print 'k'} //kkkkk ● upto(Number to, Closure closure) 1.upto 5, {print it } //12345 ● step(Number to, Number stepNumber, Closure c) 0.step( 10, 2 ) {print it} //2,4,6,8,10
  • 30. Strings ● String é um conjunto de caracteres. ● Strings Groovy são completamente MUTÁVEIS. ● Pode ser delimitado por aspas 'simples' ou "duplas" ● Pode ocupar uma ou várias linhas. ● Pode ser injetada a ela operações, variáveis... ● Métodos destrutivos e não destrutivos
  • 31. Strings ● Strings 'String de aspas simples' "Olá, sou uma 'String'!" ● GStrings – Groovy Strings ● Strings interpoladas. Permitem adicionar pedaços de código dentro delas. "1 + 1 = ${1+1}" // 1 + 1 = 2 ● Strings com múltiplas linhas. """String de Multiplas linhas"""
  • 32. Strings ● Strings como Arrays s = 'Bem vindos ao Enucomp' s.getAt(1) /* e */ s[1] /* e */ s[0,20] /* Bp */ s[4..9] /* vindos */
  • 33. Strings ● Brincando com os Operadores s = 'Bem vindos ao Enucomp' s + ' com Groovy' /*Bem vindos ao Enucomp com Groovy*/ s - 'Enucomp' + 'Groovy' /*Bem vindos ao Groovy*/ s = 'k' s * 3 /* kkk */ ● Obs.: Os operadores são métodos não- destrutivos.
  • 34. Strings ● Outros métodos interessantes: s = 'hello, Groovy' s.capitalize() /*Hello, Groovy*/ s.center(15) /* hello, Groovy */ s.padLeft(16, '-') /*---hello, Groovy*/ s.padRight(16, '-') /*hello, Groovy---*/ s.reverse() /*yvoorG ,olleh*/ ....
  • 35. Strings ● Interpolação de valores em Strings; ● Possível apenas em Strings com aspas duplas. def nome = 'João' //===>João print "Olá, ${nome}, bem vindo ao curso!" //===>Olá, João, bem vindo ao curso!'
  • 36. Coleções ● List – Coleção de objetos; def numeros = [1, 2, 3.5] def string = ["1", '2', "3"] def tudo = [10, "50", """Hello"""] def list = [numeros, string, tudo] list.each{println it} [1, 2, 3.5] [1, 2, 3] [1, 2, 3]
  • 37. Coleções ● List - Alguns métodos úteis: def list = [1,2,3,9,5] list.each {print it } //123495 list.reverse() //[5,9,3,2,1] list.putAt(3,4) //[1,2,3,4,5] list << 6 //[1,2,3,9,5,6] list.pop() //[1,2,3,9,5] list + 10 //1,2,3,4,9,5,10 list - 9 //1,2,3,4,5
  • 38. Coleções ● Range ● Representa um intervalo de valores; def range = (1..4) range.each {print "$it "} //1 2 3 4===> 1..4 ('a'..'c').each {print "$it "} //a b c ===> a..c for (i in 1..10) {println i}
  • 39. Coleções ● Map ● O mesmo que array associativo, dicionários ou hashes; ● Cada entrada é composta por uma chave e um valor; def frameworks = [groovy: "Grails", ruby: "Rails"] def map = [a:(1..4), 10:"Dez"] print framework.groovy //===>Grails print map.a //===>1..4 print map[10] //===>Dez
  • 40. Receber do teclado ● Para brincar recebendo valores do usuário em Groovy, use isso: System.in.withReader { print "Digite algo: " valor = it.readLine() println "Você me disse: ${valor.toUpperCase()}" }
  • 41. Praticando... 1. Imprimir uma String na vertical; 2. Imprimir uma String em formato de escada; 3. Receber uma linguagem, retorna uma framework; 4. Dado um determinado vetor, faça: ● Some todos os elementos; ● Mostre o maior e o meno elemento; ● Mostre os elementos invertidos; ● Ordene todos os elementos;
  • 42. Estruturas de Controle ● O que é verdadeiro em Groovy? ● Objetos não-nulos; ● Números diferentes de 0; ● Strings, GStrings, coleções não-vazias; assert !''; assert 'Olá' assert !0; assert 50 assert ![]; assert [2,'a'] assert !false; assert true assert !null; assert new Object() – Método assert é um método para testes unitários. Se retornar algo false, gera uma exceção.
  • 43. Estruturas de Controle ● Estruturas de decisão: ● If else If(10 > 5){ print 'Groovy' } else{ print 'Java' } ● Operador condicional - ?: def retorno = (1==1) ? "Iguais" : "Diferentes"
  • 44. Estruturas de Controle ● Switch switch(ling) { case 'Ruby' : println 'Rails' ;break case 'Groovy' : println 'Grails' ;break case 'PHP' : println 'Cake' ;break default : println 'Outra' ;break } if(ling.isCase('Ruby')) println 'Rails' else if (ling.isCase('Groovy')) println 'Grails' else if (ling.isCase('PHP')) println'Cake' else 'Outra' //Rails //Rails
  • 45. Estruturas de Controle ● Switch ● Em Groovy, o switch suporta vários tipos, e não só chars. switch (10) { case 0 : assert false ;break case 0..9 : assert false ;break case [8,9,11] : assert false ;break case Float : assert false ;break case {it%3 == 0} : assert false ;break case ~/../ : assert true ;break default : assert false ;break }
  • 46. Estruturas de Controle ● while def list = [1,2,3] while (list) { list.remove(0) } assert list == [] while (list.size() < 3) list << list.size()+1 assert list == [1,2,3]
  • 47. Estruturas de Controle ● for for (variable in iterable) { body } def store = '' for (String i in 'a'..'c') store += i assert store == 'abc' def j = 0 for (i in 0..10) { j += i } print j //55
  • 48. Exceções ● O tratamento de exceções é igual ao do Java. A única diferença em termos de exceção é que no Groovy é opcional colocar o throws na assinatura do método, tanto para exceções checadas quanto em não-checadas; ● Com isso, podemos escolher como e quando tratar essas exceções.
  • 49. Exceções def myMethod() { 'string'.toLong() } def log = [] try { myMethod() } catch (Exception e) { log << e.toString() } finally { log << 'finally' } log.each{println it}
  • 50. Métodos ● Em Groovy, todo método retorna alguma coisa. Quando nenhum valor é explicitamente mostrado, ele retorna null. ● O return opcional def hello(nome){ println 'Hello, meu nome é: ${nome}' } hello('Bruno') //Hello, meu nome é: Bruno ou hello 'Bruno' //Hello, meu nome é: Bruno
  • 51. Métodos ● Podemos declarar métodos com parâmetros com valores default def soma(a,b = 2){ println a + b } soma 2 //4 soma 2,3 //5 ● Métodos com parâmetros opcionais int sum(a, Object[] optionals){ for(o in optionals) a+=o a } sum(1) //1 sum(20, 1, 10, 4) //35
  • 52. Closures ● Um bloco de código reutilizável delimitado por chaves. ● Semelhante a uma classe interna; ● Podem ser declarados não só dentro das classes ● Não é executado quando definido, apenas quando for chamado; ● Apenas agem como métodos, mas são objetos normais(groovy.lang.Closure). ● Para entender melhor esse recurso, acesse: http://groovy.codehaus.org/Closures+-+Formal+Definition
  • 53. Closures ● Pode conter parâmetros; ● Modifica variáveis declaradas fora da closure; ● Invocados pelo método ● call(); ● doCall(); ● ou simplesmente pela seu nome; ● Se tiver apenas um parâmetro, não é necessário defini-lo, basta usar a palavra reservada it para referenciá-lo.
  • 54. Closures Closure cloj1 = {println 'Hello, World!'} // Sem parâmetro def cloj2 = { obj -> println "Hello, $obj!"} // Parâmetro sem tipo definido def cloj3 = {println "Hello, $it!"} // Parâmetro acessado pela palavra-chave 'it' cloj2.call('Groovy') //===> Hello, Groovy cloj3.doCall('Groovy') //===> Hello, Groovy cloj3('Groovy') //===> Hello, Groovy
  • 55. Closures ● Outros exemplos: def soma = { a, b -> print "A soma é: ${a+b}" } map = ['a':1, 'b':2] map.each{ key, value -> map[key] = value * 2 } print map //[a:2, b:4] letras = 'a'..'z' letrasUpper=[] letras.collect (letrasUpper){it * 2 } println letras //[a, b, c, d, ...] println letrasUpper //[aa, bb, cc, ...]
  • 56. Praticando... ● Fazer um programinha que receba um número, imprima-o o número de vezes que o representa de 0 até ele mesmo. Entrada: 6 Saída: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6
  • 57. Orientação à Objetos ● Classes e Objetos ● Classes é uma estrutura que abstrai coisas do mundo real para o mundo computacional; ● Define o tipo dos objetos; – Se classes fossem formas de bolo, os objetos seriam os bolos; – Objetos são instancias das classes; ● Objetos possuem dados em comportamentos; – Os dados são os atributos; – Comportamentos são os métodos; ● 1, 50, 999 são instancias da classe Integer;
  • 58. Orientação à Objetos ● Classes e Objetos ● “Oi”, 'Groovy', '8' são instancias da classe String; ● Instanciando uma classe: p = new Pessoa() ● Para os tipos básicos basta fazer isso: s = "String" i = 50 array = [10,20,60] ● Ou do modo brutal... i = new Integer(25) s = new String('Sou uma String')
  • 59. Orientação à Objetos ● Herança: ● Classes tem a capacidade de herdar comportamento de outras classes; ● As classes que provêm os comportamentos herdados são chamadas de super-classes; 1.class //java.lang.Integer 1.class.superclass //java.lang.Number ● Para herdar de outras classes usa-se o extends class Integer extends Number { ... }
  • 60. Meta-Programação ● MOP – Meta-Object Protocol ● Mágica da programação; ● Adicionar comportamento às classes em tempo de execução; ● Adicionar métodos às classes; ● Adicionar propriedades; ● Todas as classes escritas em Groovy herdam de Object e implementam a interface GroovyObject;
  • 61. Meta-Programação ● Meta Classes ● As classes definem o comportamento dos objetos; ● As meta classes definem o comportamento de certas classes ou de suas instancias; – De certa forma até as classes são objetos... public interface GroovyObject { Object invokeMethod(String name, Object args); Object getProperty(String property); void setProperty(String property, Object newValue); MetaClass getMetaClass(); void setMetaClass(MetaClass metaClass); }
  • 62. Meta-Programação ● Adicionando um método à classe String String.metaClass.digaOla = { lang -> if(lang == 'English') println 'Hello' else if(lang == 'Swedish') println 'Hej' } 'Chamando o diga Olá por uma String'.digaOla('Swedish') class Pessoa{ String nome, sobrenome } Pessoa.metaClass.getNomeCompleto = { nome + ", " + sobrebome } println new Pessoa(nome:'groovy', sobrenome : 'Grails').getNomeCompleto()
  • 63. Java Bean public class HelloWorld { private String nome; public void setNome(String nome) { this.nome = nome; } public String digaHello(){ return "Hello " + nome + "."; } public static void main(String[] args) { HelloWorld hw = new HelloWorld(); hw.setNome("Bruno"); System.out.println(hw.digaHello()); } }
  • 64. Em Groovy public class HelloWorld { private String nome; public void setNome(String nome) { this.nome = nome; } public String digaHello(){ return "Hello " + nome + "."; } public static void main(String[] args) { HelloWorld hw = new HelloWorld(); hw.setNome("Bruno"); System.out.println(hw.digaHello()); } }
  • 65. Groovy Bean ● Por defaulf as classes são public; ● Métodos modificadores dos atributos são gerados dinamicamente; ● Não é necessário criar um método construtor: p = new Pessoa(nome:'Bruno')
  • 66. Groovy Bean class HelloWorld { Getters e Setters gerados automaticamente String nome String digaHello(){ Strings Groovy "Hello, ${nome}." (GString) } static void main(args) { def hw = new HelloWorld(nome:"Groovy") print hw.digaHello() } } Parâmetro do construtor
  • 67. Groovy Bean class HelloWorld { ”Duky Typing” Tipagem dinâmica def nome def digaHello(){ "Hello, $nome" } } print new HelloWorld(nome:"Groovy").digaHello() ”Script” Groovy solto/livre
  • 68. Totalmente em Groovy Closure com parâmetro class HelloWorld { def digaHello = {nome-> "Hello ${nome}"} } print new HelloWorld().digaHello.call("Bruno") Chamada da Closure ● Em todos esses exemplos têm o mesmo resultado: >>Hello, Bruno
  • 69. Java vs Groovy public class HelloWorld { private String nome; Em java: 18 linhas public void setNome(String nome) { this.nome = nome; } public String digaHello(){ return "Hello " + nome + "."; } public static void main(String[] args) { HelloWorld hw = new HelloWorld(); hw.setNome("Bruno"); System.out.println(hw.digaHello()); } Em Groovy: 4 linhas } class HelloWorld { def digaHello = {nome-> "Hello ${nome}"} } print new HelloWorld().digaHello.call("Bruno")
  • 70. Referências ● Groovy in Action; ● Introduction to Groovy and Grails ● Mohamed Seifeddine ● Getting Started Guide ● http://groovy.codehaus.org/Getting+Started+Guide ● Em Busca do Grails ● Fernando Anselmo ● Groovy Documentation ● Oficial docs ● Básico do Groovy para quem for aprender Grails ● http://www.itexto.net/devkico/?p=231
  • 71. Referências ● Um pouco de Groovy ● Artigo Dev-Media – Java Magazine - Marcelo Castellani ● Slide curso_ruby do ENUCOMP 2008 ● Regis Pires Magalhães