Mostrando postagens com marcador groovy. Mostrar todas as postagens
Mostrando postagens com marcador groovy. Mostrar todas as postagens

sexta-feira, abril 22, 2011

Dicas Rápidas de Groovy para quem vem do Java




1. Basico

a) Nao precisa de ponto-e-virgula;
b) A ultima linha de um metodo é o que ele retorna. Mas botar o return ajuda a entender melhor;
2. Collections


// List
a = [1, 2, 2]
a.each {println it}
println a.class // imprime java.util.ArrayList
a = []; a << "foo"; (adiciona "foo" na lista)

// Set
a = [1, 2, 2] as Set
a.each {println it}
println a.class // imprime java.util.HashSet

// Map
a = ["um":1, "dois":2]
a.each {println "$it.key = $it.value"}
println a.class // retorna null (?)




3. Loops

l = 'a'..'c' // define array [a, b, c]

l.each {print it.toUpperCase()} // imprime ABC

l = l.collect {it = "x"}
// mesmo que each, mas RETORNA objeto alterado. O each nao.

l.eachWithIndex {item, i -> println "$i) $item"} // imprime 0) a 1) b 2) c

def linhas = """
rafael,29
joao
maria, 24
"""
linhas.eachLine {println it}

5.upto(10) {print it} // 5678910

5.downto(1) {print it} // 54321

3. Asserts/Try/Catch

try {
def quadrado = {it * it}(3)
quadrado-- // adicao de bug...
assert quadrado == 9: "o quadrado de 3 deve ser nove!!"
} catch (AssertionError e) {
print "Erro na asserção..."
}


-1. Bônus...

// pega ultimo elemento
print a[-1]

// Imitando JSON (quase-json, hehe)
def pessoas = [
['nome':'rafael', 'idade':29],
['nome':'joao', 'idade':23]
]
pessoas.each { p ->
println "$p.nome tem $p.idade anos"
}

// regex basico com if ternario
print "rafael" ==~ /r.*/ ? "Fez Match!" : "Nao fez..."

// operador elvis (?)
def a = "foo"
print a?.toUpperCase() // imprime FOO
a = null
print a?.toUpperCase() // imprime null, mas nao da nullpointer

// executa coisa no SO nativo (linha de comando)
print "ls".execute().text

// chama construtor e já poupula objeto
def p = new Pessoa([nome: "joao", idade: 23])

// metodo call()
def chamaPassandoQuatro (minhaClosure) {  minhaClosure.call(4) }
chamaPassandoQuatro({  print it * it })






Se lhe foi útil, deixe um comentário...não precisa de login...

quinta-feira, abril 21, 2011

Montando console do groovy no Eclipse

Se você quer ter um console do groovy no eclipse rapidamente, sem fazer download de plugins/IDEs, segue abaixo a dica.
Não precisa nem fechar o workspace, hehe...

1) Adicione o groovy no sistema se não tiver
No ubuntu basta digitar:

$ sudo apt-get install groovy

2) Crie novo projeto java no eclipse

Ctrl + N > Java Project > Next
Em Project Name digitei "console"
(nao precisa de printscreen disso né?)


3) Crie seu arquivo "console.java"

Ctrl + N > Class
Digite "console para o nome da classe. Sim, minusculo mesmo, pois isso não será uma classe...
Marque pra criar o metodo main, pra facilitar.
(tbm nao precisa de print disso...esse artigo é pra programadores java que estao indo pro grails...)

4) Adicione o groovy como ferramenta externa no eclipse

Menu: Run > External Tools > External Tools Configurations


No lado esquerdo, selecione Program e clique no icone de novo

Name: põe o que quiser... botei "groovy"
Location: /usr/bin/groovy (no caso do Ubuntu..no windows é só apontar pro groovy.exe)
Working Directory: ${workspace_loc:/console} (clique em "Browse Workspace" e selecione o projeto java)
Arguments: console.groovy
Apply pra não perder tudo

Por enquanto fizemos o seguinte: ao chamar a app externa groovy, o eclise fará o mesmo que:

$ cd {caminho-do-seu-workspace}/console
$ /usr/bin/groovy console.groovy


Importante: o groovy só executa arquivos .groovy. Entao precisamos criar
o link para o console.java

$ ln -s {caminho-do-seu-workspace}/console/console.java {caminho-do-seu-workspace}/console/console.groovy

No meu caso:

topera@topera-desktop:/dados/topera/workspace/console/src$ ls -l /home/topera/topera/workspaceteste/console/
total 8
-rw-r--r-- 1 topera topera 364 2011-04-21 12:18 console.class
lrwxrwxrwx 1 topera topera 55 2011-04-21 12:28 console.groovy -> /home/topera/topera/workspaceteste/console/console.java
-rw-r--r-- 1 topera topera 136 2011-04-21 12:18 console.java

Blz, voltando ao eclipse, devemos ter a mesma tela:

Pra ficar mais facil de chamar o groovy, na aba "Common", marque o check em "Display in favorites menu"
Apply > Close > Save
(se nao guardar este check, é bug do eclispe, faca novamente, hehe)

Vamos testar

Clique na seta setinha do botao do print abaixo ou va em:
Run > External Tools > groovy
Não aconteceu nada...imprima algo no console e tente novamente.
Pronto! Já estamos fazendo o eclipse chamar o groovy e este está lendo nosso arquivo java!
(obs: se nao funcionar pode ser pq a variavel de ambiente JAVA_HOME nao esta setada...)

5) Adicionando atalho de teclado

Pra nao ficarmos clicando toda hora, vamos adicionar o atalho

Window > Preferences > Filtre "keys > Na direita filtre por "run last"
Selecione "Run last launched external Tool" e adicione o atalho de sua preferencia.
Eu botei o Ctrl+Enter, pra ficar igual ao GroovyConsole / SQLDeveloper

6) Desligando erros de sintaxe

Vamos tranformar esse java em groovy.
Troque o codigo-fonte por isso.

print "hello groovy"
Execute. Blz. Tudo ok. Agora vamos desligar o validador java (*)
(*) Lembre-se da regra basica:

"Todo codigo java funciona em groovy, mas nem todo codigo groovy funciona em java".

Por este motivo o validador está acusando erro.
Para desliga-lo, e ficarmos apenas com o auto-complete do java (muito util por sinal), faça:

a) Botao Direito no codigo-fonte > Preferences > Report Problemas as you Type (desmarque)

Depois:

b) Botao Direito na pasta do projeto > Properties > Filtre por "validation" > Marque "Enable project specific settings" e "suspen all validators"

E por ultimo

c) Botao Direito na pasta do projeto > Properties > Filtre por "builders" > Desmarque o java


Obs1: neste ultimo item 6) nao sei qual combinacao das 3 coisas resolve o problema. Sei que as tres dão certo :)
Obs2: se ainda assim nao funcionar, apague o console.java e crie novamente.


Tutorial feito com Eclipse 3.5.2, Ubuntu 10.04


UPDATE 1:
Para o autocomplete do java funcionar, é preciso ter um minimo de classe montado.
Entao, deixe esse trecho de codigo no final do console.java

class a {
static {
"".isEmpty(); //teste o autocomplete aqui...
}
}

UPDATE 2:
Se não quiser ter todo este trabalho é só usar o GroovyConsole, na web.