<?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>Escalare - A louca jornada de um programador &#187; Sem categoria</title>
	<atom:link href="http://gbenatti.net/blog/category/sem-categoria/feed/" rel="self" type="application/rss+xml" />
	<link>http://gbenatti.net/blog</link>
	<description>Um blog com a jornada deste que lhes fala no mundo da programação de dispositivos móveis, jogos e linguagens de programação.</description>
	<lastBuildDate>Mon, 19 Apr 2010 15:00:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>O mundo em 3 dimensões</title>
		<link>http://gbenatti.net/blog/2010/04/o-mundo-em-3-dimensoes/</link>
		<comments>http://gbenatti.net/blog/2010/04/o-mundo-em-3-dimensoes/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 15:00:21 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[tv]]></category>
		<category><![CDATA[visão]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/2010/04/o-mundo-em-3-dimensoes/</guid>
		<description><![CDATA[O mundo em 3 dimensões está chegando. Pelo menos pra mim.
Eu e mais uns 10% da população mundial sofremos de um problema de visão que não nôs permite ver em três dimensões, ou seja, não temos a capacidade de perceber a profundidade dos objetos a nossa volta.
Os motivos pra isso são vários, no meu caso, [...]]]></description>
			<content:encoded><![CDATA[<p>O mundo em 3 dimensões está chegando. Pelo menos pra mim.</p>
<p>Eu e mais uns 10% da população mundial sofremos de um problema de visão que não nôs permite ver em três dimensões, ou seja, não temos a capacidade de perceber a profundidade dos objetos a nossa volta.<br />
Os motivos pra isso são vários, no meu caso, por ser estrábico a diferença entre as imagens que cada olho vê é muito grande e então o cerebro nao consegue fundir as mesmas em uma imagem 3d coerente, desiste de tentar, e faz com que apenas um olho &#8220;veja&#8221; de cada vez.</p>
<p>Isso me impede por exemplo de ver os efeitos de profundidade em filmes como Avatar.</p>
<p>Mas meus problemas acabaram-se.</p>
<p>Sexta feira estive na fnac da avenida paulista, pra poder ver a nova televisão da samsung led 3d. E pra minha surpresa, com uso do óculos que acompanha a tv e que usa uma tecnologia que faz com que se veja cada imagem com um olho de cada vez, eu consegui ver em três dimensões.</p>
<p>A ironia disso, é que no mundo real, eu não vejo em 3D, mas em uma tela plana, com a ajuda da tecnologia sim.</p>
<p>Agora é só esperar mais uns anos pra poder implantar algo assim direto no cerebro <img src='http://gbenatti.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2010/04/o-mundo-em-3-dimensoes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como configurar a conexão de dados TIM no Android</title>
		<link>http://gbenatti.net/blog/2009/11/como-configurar-a-conexao-de-dados-tim-no-android/</link>
		<comments>http://gbenatti.net/blog/2009/11/como-configurar-a-conexao-de-dados-tim-no-android/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 14:22:27 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[APN]]></category>
		<category><![CDATA[TIM]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=83</guid>
		<description><![CDATA[Os dados da APN da Tim para o Android são os seguintes:
Name &#8211; TIM CONNECT FAST 72403
APN &#8211; tim.br
proxy &#8211; not set
port &#8211; not set
Username &#8211; tim
Password &#8211; tim
Server &#8211; not set
MMSC &#8211; not set
MMS proxy &#8211; not set
MMS port &#8211; not set
MCC &#8211; 724
MNC &#8211; 03
APN type &#8211; not set
O MNC pode ser 02, [...]]]></description>
			<content:encoded><![CDATA[<p>Os dados da APN da Tim para o Android são os seguintes:</p>
<p>Name &#8211; TIM CONNECT FAST 72403<br />
APN &#8211; tim.br<br />
proxy &#8211; not set<br />
port &#8211; not set<br />
Username &#8211; tim<br />
Password &#8211; tim<br />
Server &#8211; not set<br />
MMSC &#8211; not set<br />
MMS proxy &#8211; not set<br />
MMS port &#8211; not set<br />
MCC &#8211; 724<br />
MNC &#8211; 03<br />
APN type &#8211; not set</p>
<p>O MNC pode ser 02, 03 ou 04, dependendo da região.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/11/como-configurar-a-conexao-de-dados-tim-no-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curiosidades em Boo &#8211; Pipeline de compilação</title>
		<link>http://gbenatti.net/blog/2009/11/curiosidades-em-boo-pipeline-de-compilacao/</link>
		<comments>http://gbenatti.net/blog/2009/11/curiosidades-em-boo-pipeline-de-compilacao/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:53:51 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[truques]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=73</guid>
		<description><![CDATA[Como já comentei, Boo é uma linguagem que tem como uma das caracteristicas mais marcantes sua extensibilidade.
A extensibilidade se dá na forma de macros e atributos sintaticos que modificam o código gerado no momento da compilação, e também em mudanças no próprio compilador, através do conceito de pipelines de compilação.
Para se entender melhor, quando você [...]]]></description>
			<content:encoded><![CDATA[<p>Como já comentei, Boo é uma linguagem que tem como uma das caracteristicas mais marcantes sua extensibilidade.</p>
<p>A extensibilidade se dá na forma de macros e atributos sintaticos que modificam o código gerado no momento da compilação, e também em mudanças no próprio compilador, através do conceito de pipelines de compilação.<br />
Para se entender melhor, quando você usa o compilador booc, o mesmo executa uma série de passos, que começa com o parsing do arquivo, execução das analises semanticas, transformações na AST e por fim geração do assembly (exe ou dll). Isso é o que é conhecido como pipeline padão de compilação.<br />
O compilador booc já vem com várias outras pipelines definidas, e permite também que o programador defina outras.</p>
<p>Uma das pipelines bem interessantes que já vem com o compilador é a pipeline chamada boo, essa pipeline executa todo o processo de compilação normal, com todos os passos e todas as transformações que são aplicadas a AST e no final, invés de gerar um assembly, gera uma saida boo com todo o código que seria compilado para a criação do assembly.</p>
<p>Parece abstrato demais ? Vamos ao código então, o velho e bom Hello World.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Hello World&quot;</span></div>
</li>
</ol>
</div>
<p>Esse é um código mínimo em Boo que escreve a mensagem &#8220;Hello World&#8221; na tela, mas você pode se perguntar, esse não é um executavel .Net ? Cadê o static void Main&#8230; ?</p>
<p>Vamos usar a nossa nova conhecida, a pipeline boo, pra descobrir.  Salve o programa no arquivo hello.boo e rode:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">booc -p:boo hello.boo</div>
</li>
</ol>
</div>
<p>E você terá:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>System.<span class="me1">Runtime</span>.<span class="me1">CompilerServices</span>.<span class="me1">CompilerGlobalScopeAttribute</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">public final transient <span class="kw1">class</span> HelloModule<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; private static <span class="kw1">def</span> Main<span class="br0">&#40;</span>argv as <span class="br0">&#40;</span><span class="kw3">string</span><span class="br0">&#41;</span><span class="br0">&#41;</span> as void:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; System.<span class="me1">Console</span>.<span class="me1">WriteLine</span><span class="br0">&#40;</span><span class="st0">&#8216;Hello World&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; private <span class="kw1">def</span> constructor<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>A saída mostra o código que seria compilado depois de todas as mágicas executadas pelo compilador.</p>
<p>Note o uso do parâmetro -p:boo, é ele que diz ao compilador pra usar a pipeline boo e não a padrão.</p>
<p>Um detalhe, a chamada a print virou um System.Console.WriteLine, porque print é uma macro que ao ser executada expande para a chamada equivalente WriteLine.</p>
<p>Isso é só uma pequena parte do que pode ser feito com as pipelines, de geração de código em outra linguagem, verificação de padrões de desenvolvimento, compilação em memória, code completing, as possibilidades são várias.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/11/curiosidades-em-boo-pipeline-de-compilacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boo Friday &#8211; Parte II</title>
		<link>http://gbenatti.net/blog/2009/11/boo-friday-parte-ii/</link>
		<comments>http://gbenatti.net/blog/2009/11/boo-friday-parte-ii/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 19:18:48 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[BooFriday]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=62</guid>
		<description><![CDATA[De volta a nossa série sobre Boo. Hoje eu vou falar sobre o primeiro item do Boo Manifesto. Que diz que Boo é uma linguagem que foi concebida para ter uma sintaxe limpa e de fácil digitação. 
Quais caracteristicas Boo tem que estão ali pra atender esse objetivo ?
Parecido com Python.
Python é uma linguagem que [...]]]></description>
			<content:encoded><![CDATA[<p>De volta a nossa série sobre Boo. Hoje eu vou falar sobre o primeiro item do Boo Manifesto. Que diz que Boo é uma linguagem que foi concebida para ter uma sintaxe limpa e de fácil digitação. </p>
<p>Quais caracteristicas Boo tem que estão ali pra atender esse objetivo ?</p>
<p><strong>Parecido com Python.</strong></p>
<p>Python é uma linguagem que é conhecida pela sua elegância e sua capacidade de expressar uma grande quantidade de informação de uma forma sucinta, copiando o básico da sintaxe de Python, Boo já começa com o pé direito nesse quesito.</p>
<p><strong>Açúcar sintático para patterns comuns de programação.</strong></p>
<p>Boo suporta uma gama de construções de forma simplificada, listas, hashtables, arrays. Alem dessas estruturas, formas simples de criação de objetos, uso de expressões regulares, formatação de strings e vários outros detalhes fazem de Boo uma linguagem que necessita de pouca digitação.</p>
<p>Alguns exemplos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1"># literais simples</span></div>
</li>
<li class="li1">
<div class="de1">myArray = <span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span>,<span class="nu0">5</span>,<span class="nu0">6</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">myList = <span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span>,<span class="nu0">5</span>,<span class="nu0">6</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">myHash = <span class="br0">&#123;</span><span class="nu0">1</span>: <span class="st0">&quot;um&quot;</span>, <span class="nu0">2</span>: <span class="st0">&quot;dois&quot;</span>, <span class="nu0">3</span>: <span class="st0">&quot;tres&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># formatação de strings</span></div>
</li>
<li class="li1">
<div class="de1">language = <span class="st0">&quot;Boo&quot;</span></div>
</li>
<li class="li1">
<div class="de1">grade = <span class="st0">&quot;Awesome&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;${language} is ${grade}&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># uso de regex</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">&quot;Cool&quot;</span><span class="br0">&#41;</span> <span class="kw1">if</span> language =~ /^Boo/</div>
</li>
</ol>
</div>
<p><strong>Declaração automática de variáveis.</strong></p>
<p>Em Boo, um assignement cria uma nova variável local naquele escopo.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">newVar = <span class="nu0">1</span> <span class="co1"># cria uma nova variável newVar</span></div>
</li>
</ol>
</div>
<p><strong>Inferencia automatica de tipos.</strong></p>
<p>Uma coisa verdadeira no mundo da computação, é que muitas vezes nós programadores somos preguiçosos, só as vezes é claro. Exemplo, da do um método como o a seguir:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> two<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">dois = two<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Não está na cara que o método two, retorna um tipo inteiro ? e que dois contem um inteiro também ? Então porque devemos escrever códigos assim:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> two<span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw2">int</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">dois as <span class="kw2">int</span> = two<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Na verdade em Boo não é necessário, a primeira versão funciona perfeitamente, gerando código equivalente a segunda versão, tendo assim todas as vantagens de código estaticamente tipado.</p>
<p>Fica a cargo do programador decidir qual código escrever. Eu como bom programador sei qual versão prefiro <img src='http://gbenatti.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><strong>Classes não são necessárias.</strong></p>
<p>Para algumas utilizações como em scripts, muitas vezes a declaração de uma classe só pra deixar o compilador feliz não faz muito sentido.<br />
Vocês já viram maior cambiarra do que o famoso <strong>&#8220;public static void main&#8221;</strong> ? Poxa, eu só queria escrever um hello na tela e tenho que declarar uma classe ? com um método public static ?? que recebe uma lista de parâmetros que eu não estou interessado ???</p>
<p>Ainda bem que em Boo, meu HelloWorld pode ser simplesmente</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Hello World&quot;</span></div>
</li>
</ol>
</div>
<p>Esse post já esta meio grande, no proximo falaremos de expressividade. Até lá espero aprender o que isso quer dizer.</p>
<p>Cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/11/boo-friday-parte-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Truques em Scala &#8211; Extractors</title>
		<link>http://gbenatti.net/blog/2009/11/truques-em-scala-extractors/</link>
		<comments>http://gbenatti.net/blog/2009/11/truques-em-scala-extractors/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 14:41:46 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[truques]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=53</guid>
		<description><![CDATA[Scala muitas vezes me surpreende com a elegancia e integridade da linguagem. O que chamo aqui de integridade, é a forma como a linguagem combina vários conceitos de uma forma uniforme.
Uma das features interessantes de  Scala é que ela permite ao programador extrair informações de objetos usando pattern matching, por exemplo se você tiver o [...]]]></description>
			<content:encoded><![CDATA[<p>Scala muitas vezes me surpreende com a elegancia e integridade da linguagem. O que chamo aqui de integridade, é a forma como a linguagem combina vários conceitos de uma forma uniforme.</p>
<p>Uma das features interessantes de  Scala é que ela permite ao programador extrair informações de objetos usando pattern matching, por exemplo se você tiver o seguinte tipo chamado Email:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">case</span> <span class="kw1">class</span> Email<span class="br0">&#40;</span>name: <span class="kw3">String</span>, domain: <span class="kw3">String</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Seria possivel testar se um objeto é do tipo Email, e ao mesmo tempo retornar o name e domain com o seguinte código:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">unknownObject match <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">case</span> Email<span class="br0">&#40;</span>name, domain<span class="br0">&#41;</span> =&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; println<span class="br0">&#40;</span>name + <span class="st0">&quot; at &quot;</span> + domain<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">case</span> _ =&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; println<span class="br0">&#40;</span><span class="st0">&quot;It&#8217;s not an email&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>No caso de unknownObject ser declarado como:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">val unknownObject = Email<span class="br0">&#40;</span><span class="st0">&quot;georges&quot;</span>, <span class="st0">&quot;gbenatti.net&quot;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>A saida seria <strong>&#8220;georges at gbenatti.net&#8221;</strong></p>
<p>Já se unknownObject fosse declarado como:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">val unknownObject: Any = <span class="st0">&quot;georges@gbeatti.net&quot;</span></div>
</li>
</ol>
</div>
<p>A saida seria <strong>&#8220;It&#8217;s not an email&#8221;</strong></p>
<p>Mas não seria muito legal se fosse possivel fazer essa segunda opção funcionar ? Ai entra a elegância de Scala, você pode definir extractors que permitem que sejam extraidos dados de determinadas estruturas, sejam elas árvores, listas e até mesmo strings.</p>
<p>Um extractor é um objeto Scala que define um método unapply. A responsabilidade do unapply é fazer o matching de um valor e o separar em seus componentes, para o caso acima o extractor poderia ser definido assim:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">object EmailStr  <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> unapply<span class="br0">&#40;</span>str: <span class="kw3">String</span><span class="br0">&#41;</span>: Option<span class="br0">&#91;</span><span class="br0">&#40;</span><span class="kw3">String</span>, <span class="kw3">String</span><span class="br0">&#41;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; val parts = str <span class="kw3">split</span> <span class="st0">&quot;@&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>parts.<span class="me1">length</span> == <span class="nu0">2</span><span class="br0">&#41;</span> Some<span class="br0">&#40;</span>parts<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>, parts<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">else</span> None</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Definido esse extractor poderiamos reescrever o match da seguinte forma:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">unknownObject match <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">case</span> Email<span class="br0">&#40;</span>name, domain<span class="br0">&#41;</span> =&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; println<span class="br0">&#40;</span>name + <span class="st0">&quot; at &quot;</span> + domain<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">case</span> EmailStr<span class="br0">&#40;</span>name, domain<span class="br0">&#41;</span> =&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; println<span class="br0">&#40;</span>name + <span class="st0">&quot; at &quot;</span> + domain<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">case</span> _ =&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; println<span class="br0">&#40;</span><span class="st0">&quot;It&#8217;s not an email&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>E ele funcionaria tanto com objetos da classe Email quanto com strings no formato name@domain, ou seja, código final do usuário simples e elegante.</p>
<p>Até mais pp pessoal&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/11/truques-em-scala-extractors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
