Arquivo para a categoria ‘Maravilhas do Groovy’
Maravilhas do Groovy: O método ‘collect’ das listas
Passei agora pela seguinte situação:
Possuía uma lista de objetos (pogos) com várias propriedades, e a partir desta lista, eu precisaria de uma nova lista com apenas os ids de cada um destes objetos, ao invés da clássica iteração para se resgatar os valores, acabei usando o método collect, que recebe uma closure, e para cada objeto da lista, aplica esta closure!
Para quem conhece, funciona da mesma maneira que o FileFilter do Java, que é usado para filtrar arquivos dentro de um diretório.
def listaPogos = ...
def listaIds = listaPogos.collect { pogo ->
pogo.id
}
Quer ver funcionando? Clique aqui para rodar o código no Groovy Web Console
Maravilhas do Groovy: A propriedade metaClass
Uma das facilidades que o groovy também traz, é a possibilidade de adicionar métodos em nossas classes em tempo de execução através da propriedade metaClass dos objetos.
Agora mesmo, eu precisava de um recurso para criar “slugs” (essas URLs amigáveis que o WordPress cria) de titulos de artigos. Tradicionalmente, o processo é criar aquelas classes **Utils.java com todos os métodos utilitários, mas com a metaprogramação, o mais usual passa a ser adicionar o métodos nas próprias classes que geram este comportamento.
No exemplo abaixo, eu adicionei o método slug() em runtime dentro da classe String e a partir de agora, qualquer objeto da classe java.lang.String possui o método slug(), com o comportamento descrito abaixo.
String.metaClass.slug { ->
def s = delegate.toLowerCase()
s = s.replaceAll(/[^a-z0-9\s-]/, "").replaceAll(/\s+/, " ").trim()
if (s.length() > 45)
s = s.substring(0, 45).trim()
s.replaceAll(/\s/, "-")
}
Em primeiro, definimos uma varíavel interna ’s’ com o valor da própria string que está sendo usada (através da propriedade delegate), após isso, aplicamos a primeira regex de caracteres especiais, outra para substituir os espaços em excesso e cortamos a string caso ela tenha mais que 45 caracteres. Por fim, substituímos os espaços por dashes.
Você pode rodar este script neste endereço, basta clicar em “Execute script”
Maravilhas do Groovy: Elvis Operator
Nova categoria de posts “Maravilhas do Groovy”, inspirada pelo MrHaki e seus posts sobre o diferencial e tricks que o groovy oferece.
O Elvis Operator é um operador em Groovy (já estará embutido no Java7) representado pelo “ponto de interrogação” seguido pelos caracteres “dois pontos” ou seja ?:
O objetivo é fazer a comparação do valor de uma referencia a null, para decidir sobre uma atribuição de valor. Um exemplo bem comum é comparar o um parametro que vem do request de qual página irá ser mostrada de uma lista de objetos, porém, caso a página não esteja presente, devemos sempre mostrar a primeira página.
Tradicionalmente, em java, com o operador ternário:
Integer pageParam = (...) pageParam = (pageParam == null) ? 1 : pageparam;
Com o elvis operator, ele já faz esta comparação implicitamente e caso o valor da variável seja null, recebe o valor que está a direita do operador.
def pageParam = (...) pageParam = pageParam ?: 1
— Post editado as 18:10 do dia 22/10 —
Meu amigo @paulosuzart do CodeMountain fez um post sobre o Elvis Operator em Scala.
A gente sabe que não existe, mas ele criou um. Vale a pena conferir. :)