Archive for the 'groovy' Category

Erro no site oficial do Groovy

Acordei toda animada pra dar mais uma espiadinha em Groovy, mas logo que entrei no site oficial dei de cara com esse erro:

I/O error while communicating with HTTP server: Read timed out 
com.openxource.unity.providers.confluence.
     ConfluencePageProviderImpl.getPage(ConfluencePageProviderImpl.java:87)
com.openxource.unity.beans.impl.UnityPageRendererImpl.getFragment(UnityPageRendererImpl.java:358)
com.openxource.unity.beans.impl.UnityPageRendererImpl.renderPage(UnityPageRendererImpl.java:165)
com.openxource.unity.servlets.ContentServlet.doGet(ContentServlet.java:101)
javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:99)
com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:163)
com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208)
com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:259)
com.caucho.server.port.TcpConnection.run(TcpConnection.java:363)
com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490)
com.caucho.util.ThreadPool.run(ThreadPool.java:423)
java.lang.Thread.run(Thread.java:595)

Ai ai… Será que era bom demais pra ser verdade? :/

O jeito é esperar alguém se ligar do problema. Já era hora mesmo de eu começar a dar uma lida nos livros. Estou com o “Groovy Programming - An Intro for Java Developers”. Espero que seja bom. E vamos lá!

:)

Operadores Elvis e Safe Navigation da linguagem Groovy

Estou sem palavras. Groovy está ficando cada vez mais interessante pra mim.

Descobri que existe um operador chamado Elvis (?:). Na verdade, ele é uma versão simplificada do operador ternário. Caso uma variável retorne null ou false, é possível aplicar este operador para que se utilize um valor default. Observe um exemplo de uso:

def displayName = user.name ?: "Anonymous" 

Neste caso, se name vier null, “Anonymous” será setado na variável displayName. :D

Agora o motivo deste operador se chamar Elvis é ainda uma incógnita pra mim. Será que tem a ver com a solene frase “Elvis não morreu”? Hmmm.. E será que Ruby, Python ou Perl tem esse operador e eu não sabia? o.O

Bom, tem outro operador bem legal também. É chamado de Safe Navigation (?.). Esse é pra lá de útil, pois ele serve para evitar NullPointerException (que Java programmer não odeia essa exceção…?). Normalmente, quando você tem uma referência para um objeto, você precisa verificar se isso não é null antes de acessar um método ou alguma propriedade do objeto, certo? (a menos que você seja um programador hard core que goste de viver fortes emoções - e exceções..) Enfim, para evitar isso você pode usar o Safe Navigation Operator que simplesmente vai retornar null ao invés de atirar uma exceção. Observe:

// Se admin não existir, user será null.
def user = User.find( "admin" )    
// Se user ou user.address é null, streetName será null.
// Não nenhuma NPE será atirada!! woohooo!!!
def streetName = user?.address?.street   

:D

Fonte: http://groovy.codehaus.org

Algumas diferenças entre Groovy e Java

Groovy tenta ser tão natural quanto possível para desenvolvedores Java. Os projetistas da linguagem Groovy partiram do princípio da “menor surpresa” quando criaram Groovy, particularmente para desenvolvedores que estão aprendendo Groovy mas estão vindo do mundo Java.

Segue uma lista de diferenças entre Groovy e Java.

1 Todos estes pacotes e classes são importados por default, isto é, você não tem que usar um import explícito para usá-los:

  • java.io.*
  • java.lang.*
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.*
  • java.util.*
  • groovy.lang.*
  • groovy.util.*

2 == significa igualdade para tipos primitivos em Java e significa igualdade entre referências quando se trata de objetos. Para simplificar algumas bizarrices do autoboxing de Java, em Groovy == significa equals(). Se você precisa verificar a igualdade entre referências, você deve usar o método “is” como foo.is(bar).

3 “in” é uma palavra-chave, então não use isso como um nome de variável

4 Ao declarar um array, você não pode escrever:

int[] a = {1, 2, 3};

Você precisa escrever:

int[] a = [1,2,3]

5 Se você costumava escrever um loop “for” assim:

for (int i=0; i < len; i++) {...}

Tudo bem, mas você só pode usar uma única variável como contador. Uma alternativa pra este “for” seria:

for (i in 0..len-1) {...}

Ou…

for (i in 0..<len) {...}

Ou.. (esse eu sempre achei lindo em Ruby)

len.times {...}  

6 Ponto-e-vírgula é opcional. Use se você gosta. Entretanto, em alguns casos é necessário pois pode haver redundância.

7 A palavra-chave “return” é opcional.

8 Você pode usar a palavra-chave “this” dentro de métodos estáticos.

9 Métodos e classes são públicos por default.

10 Inner classes não são suportadas, mas você pode usar closures ao invés disto. :D

11 O cláusula throws na assinatura de um método não é checada pelo compilador Groovy, pois não existe diferença entre checked e unchecked exceptions.

12 Você não terá erros de compilação como você teria em Java ao usar membros indefinidos ou ao passar argumentos de tipos errados.

Enjoy!!! ;)

Fonte: http://groovy.codehaus.org/

« Página Anterior