<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lucas Teixeira &#187; Maravilhas do Groovy</title>
	<atom:link href="http://lucastex.com.br/category/maravilhas-do-groovy/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucastex.com.br</link>
	<description>@lucastex</description>
	<lastBuildDate>Mon, 19 Jul 2010 11:39:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maravilhas do Groovy: O método &#8216;collect&#8217; das listas</title>
		<link>http://lucastex.com.br/2009/11/06/maravilhas-do-groovy-o-metodo-collect-das-listas/</link>
		<comments>http://lucastex.com.br/2009/11/06/maravilhas-do-groovy-o-metodo-collect-das-listas/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 00:28:40 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Maravilhas do Groovy]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[mop]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=142</guid>
		<description><![CDATA[

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 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2009%252F11%252F06%252Fmaravilhas-do-groovy-o-metodo-collect-das-listas%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Maravilhas%20do%20Groovy%3A%20O%20m%C3%A9todo%20%27collect%27%20das%20listas%22%20%7D);"></div>
<p>Passei agora pela seguinte situação:</p>
<p>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 <strong>collect</strong>, que recebe uma closure, e para cada objeto da lista, aplica esta <a href="http://lucastex.com.br/2009/10/21/nao-tenha-medo-das-closures/" target="_blank">closure</a>!</p>
<p>Para quem conhece, funciona da mesma maneira que o <a href="http://java.sun.com/javase/6/docs/api/java/io/FileFilter.html" target="_blank">FileFilter</a> do Java, que é usado para <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#listFiles%28java.io.FileFilter%29" target="_blank">filtrar arquivos dentro de um diretório</a>.</p>
<pre class="brush: groovy;">def listaPogos = ...
def listaIds = listaPogos.collect { pogo -&gt;
   pogo.id
}</pre>
<p>Quer ver funcionando? <a href="http://groovyconsole.appspot.com/?id=36001" target="_blank">Clique aqui</a> para rodar o código no Groovy Web Console</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/06/maravilhas-do-groovy-o-metodo-collect-das-listas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maravilhas do Groovy: A propriedade metaClass</title>
		<link>http://lucastex.com.br/2009/10/25/maravilhas-do-groovy-a-propriedade-metaclass/</link>
		<comments>http://lucastex.com.br/2009/10/25/maravilhas-do-groovy-a-propriedade-metaclass/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 14:55:53 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maravilhas do Groovy]]></category>
		<category><![CDATA[metaClass]]></category>
		<category><![CDATA[mop]]></category>
		<category><![CDATA[slug]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=70</guid>
		<description><![CDATA[

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 &#8220;slugs&#8221; (essas URLs amigáveis que o WordPress cria) de titulos de artigos. Tradicionalmente, o processo é criar aquelas classes **Utils.java [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2009%252F10%252F25%252Fmaravilhas-do-groovy-a-propriedade-metaclass%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Maravilhas%20do%20Groovy%3A%20A%20propriedade%20metaClass%22%20%7D);"></div>
<p>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 <strong>metaClass</strong> dos objetos.</p>
<p>Agora mesmo, eu precisava de um recurso para criar &#8220;slugs&#8221; (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.</p>
<p>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.</p>
<pre class="brush: groovy;">String.metaClass.slug { -&gt;
    def s = delegate.toLowerCase()
    s = s.replaceAll(/[^a-z0-9\s-]/, &quot;&quot;).replaceAll(/\s+/, &quot; &quot;).trim()
    if (s.length() &gt; 45)
        s = s.substring(0, 45).trim()
    s.replaceAll(/\s/, &quot;-&quot;)
 }</pre>
<p>Em primeiro, definimos uma varíavel interna &#8217;s&#8217; com o valor da própria string que está sendo usada (através da propriedade <em>delegate</em>), 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.</p>
<p>Você pode rodar este script <a href="http://groovyconsole.appspot.com/?id=28001" target="_self">neste endereço</a>, basta clicar em &#8220;Execute script&#8221;</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/10/25/maravilhas-do-groovy-a-propriedade-metaclass/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Maravilhas do Groovy: Elvis Operator</title>
		<link>http://lucastex.com.br/2009/10/22/maravilhas-do-groovy-elvis-operator/</link>
		<comments>http://lucastex.com.br/2009/10/22/maravilhas-do-groovy-elvis-operator/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 14:09:42 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Maravilhas do Groovy]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=64</guid>
		<description><![CDATA[

Nova categoria de posts &#8220;Maravilhas do Groovy&#8221;, 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 &#8220;ponto de interrogação&#8221; seguido pelos caracteres &#8220;dois pontos&#8221; ou seja  ?:
O objetivo é fazer a comparação do valor de [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2009%252F10%252F22%252Fmaravilhas-do-groovy-elvis-operator%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Maravilhas%20do%20Groovy%3A%20Elvis%20Operator%22%20%7D);"></div>
<p>Nova categoria de posts &#8220;Maravilhas do Groovy&#8221;, inspirada pelo MrHaki e seus posts sobre o diferencial e <em>tricks </em>que o groovy oferece.</p>
<p>O Elvis Operator é um operador em Groovy (já estará embutido no Java7) representado pelo &#8220;ponto de interrogação&#8221; seguido pelos caracteres &#8220;dois pontos&#8221; ou seja  <span style="color: #ff0000;"><strong>?:</strong></span></p>
<p>O objetivo é fazer a comparação do valor de uma referencia a <strong>null</strong>, 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.</p>
<p>Tradicionalmente, em java, com o operador ternário:</p>
<pre class="brush: java;">Integer pageParam = (...)
pageParam = (pageParam == null) ? 1 : pageparam;
</pre>
<p>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.</p>
<pre class="brush: groovy;">def pageParam = (...)
pageParam = pageParam ?: 1
</pre>
<p><em>&#8212; Post editado as 18:10 do dia 22/10 &#8212;</em><br />
Meu amigo <a href="http://twitter.com/paulosuzart" target="_blank">@paulosuzart</a> do <a href="http://codemountain.wordpress.com" target="_self">CodeMountain </a>fez um post sobre o Elvis Operator em Scala.<br />
A gente sabe que não existe, mas <a href="http://codemountain.wordpress.com/2009/10/22/sem-elvis-operator-crie-um/" target="_blank">ele criou um</a>. Vale a pena conferir. :)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/10/22/maravilhas-do-groovy-elvis-operator/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
