quinta-feira, 4 de março de 2010

Groovy & Grails – Tutorial – Parte 5

Ontem falei de Strings. Hoje falarei sobre números. O GDK (Groovy Developers Kit – O equivalente ao JDK) fornece alguns métodos bem legais nos objetos que representam números. Como por exemplo os operadores plus, minus, abs, round… E mais alguns métodos bem mais interessantes:

  • times: para repetições
  • upTo: para uma sequência crescente de valores
  • downTo: para uma sequência decrescente de valores
  • step: para uma sequência crescente ou decrescente de valores.

Exemplo:

times:

def sequencia = ''

5.times{ //vai repetir o código abaixo 5 vezes

sequencia += 'x'

}

assert sequencia = 'xxxxx'

upTo:

def sequencia = ''

1.upTo(5) { numero –> //passa o valor como parâmetro

sequencia += numero

}

assert sequencia == '12345'

downTo:

def sequencia = ''

5.downTo(-2) { numero –> //passa o valor como parâmetro

sequencia += numero + ', '

}

assert sequencia == '5, 4, 3, 2, 1, 0, -1, -2, '

step:

def sequencia = ''

2.step(4, 0.5) { numero –> //passa o valor como parâmetro

sequencia += numero + ', '

}

assert sequencia == '2, 2.5, 3, 3.5, '

É… a princípio, é estranho você colocar uma chamada de método a partir de um número, como 2.upTo… Mas lembre-se que em Groovy todos elementos são objetos..

quarta-feira, 3 de março de 2010

Groovy & Grails – Tutorial – Parte 4

1) Mais exemplos. Seguem abaixo alguns exemplos de manipulação de Strings em Groovy. Todos são verdadeiros (os asserts retornam true) e auto-explicativos:

saudacao = "Alo Groovy"

assert saudacao.startsWith('Alo')

assert saudacao.getAt(0) == 'A'

assert saudacao[0] == 'A'

assert saudacao.indexOf('Groovy') > 0

assert saudacao.contains('Groovy')

assert saudacao[4..9] == 'Groovy'

assert 'E ai? ' + saudacao – 'Alo ' == 'E ai? Groovy' //Este aqui é muito legal!!!

assert saudacao.count('o') == 3

Reparou que algumas Strings estão entre aspas simples, ao invés de aspas duplas, como estamos normalmente acostumados? As Strings com aspas simples não recebem tratamento de conteúdo por parte do Groovy. Explicando melhor (através de exemplo, de novo):

def nome = 'Groovy'

String oie = "Tutorial ${nome}" // resultado = "Tutorial Groovy”

String oie = 'Tutorial ${nome}' // resultado = "Tutorial ${nome}"

Entendeu? :-)

segunda-feira, 1 de março de 2010

Groovy & Grails – Tutorial – parte 3.5

Mais Groovy:

1) Objetos, objetos, objetos...
Em Groovy, todas as variáveis são instâncias de java.lang.Object. Ou seja: mesmo os tipos primitivos são representados pelos seus Objects equivalentes (int -> Integer, etc...).

Em Java, se você tiver uma variável int x, você não pode fazer algo como x.toString();, pois o x não é um objeto. Em contrapartida, você não pode pegar a variável Integer y e utilizar um operador numérico sobre ela, como por exemplo y * 2. Em Groovy você pode fazer as duas coisas.

Isto traz alguns comportamentos bem interessantes. Por exemplo:

def x = 1
def y = 2
assert x + y == 3
assert x.plus(y) == 3
assert x instanceof Integer

As variáveis x e y são instâncias da classe Integer, mas em Groovy eu posso utilizá-las como se fossem do tipo int diretamente, sem precisar nenhum cast (ou unboxing). Todos os asserts acima são verdadeiros.

Hoje estou sem tempo, não deu para fazer um post maior... Fica para amanhã. :-)