<?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>Saga do programador &#187; aprenda ruby</title>
	<atom:link href="http://www.sagadoprogramador.com.br/tag/aprenda-ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sagadoprogramador.com.br</link>
	<description></description>
	<lastBuildDate>Thu, 22 Sep 2011 04:20:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>DRY e Blocos de Código com Ruby</title>
		<link>http://www.sagadoprogramador.com.br/2010/02/dry-e-blocos-de-codigo-com-ruby/</link>
		<comments>http://www.sagadoprogramador.com.br/2010/02/dry-e-blocos-de-codigo-com-ruby/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 02:54:22 +0000</pubDate>
		<dc:creator>Sergio Azevedo</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby para iniciantes]]></category>
		<category><![CDATA[aprenda ruby]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[blocos]]></category>
		<category><![CDATA[blocos de codigo ruby]]></category>
		<category><![CDATA[ruby block]]></category>
		<category><![CDATA[ruby blocks]]></category>

		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=451</guid>
		<description><![CDATA[O Iuri já mostrou num post anterior, como criar métodos (funções) em ruby. Sendo assim somos praticamente craques em construir funções ruby. Neste post vamos explorar recursos avançados e interessantes das funçoes ruby, para isso, utilizaremos um array com alguns nomes. Problema Inicial: Devemos criar um  método que seja capaz de percorrer um array, exibindo seus [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://twitter.com/iurims">Iuri</a> já mostrou num <a href="http://www.sagadoprogramador.com.br/2009/07/aprenda-ruby-parte-v-metodos/">post anterior</a>, como criar métodos (funções) em ruby. Sendo assim somos praticamente craques em construir funções ruby. Neste post vamos explorar recursos avançados e interessantes das funçoes ruby, para isso, utilizaremos um array com alguns nomes.</p>
<h2>Problema Inicial:</h2>
<p>Devemos criar um  método que seja capaz de percorrer um array, exibindo seus elementos. <em>(Ok, tudo bem nós sabemos que todo array possui um método each. Mas vamos fingir que esse kra não existe)</em></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">lista = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;sergio&quot;</span>,<span style="color:#996600;">&quot;roberto&quot;</span>, <span style="color:#996600;">&quot;iuri&quot;</span>,<span style="color:#996600;">&quot;luiz&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">def</span> mostra_elementos<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> elemento <span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#CC0066; font-weight:bold;">array</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> elemento
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
mostra_elementos<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Ótimo! Atingimos nosso objetivo. O codigo acima exibira os nomes contidos no array.</p>
<h2>Os requisitos mudaram:</h2>
<p>Agora nós queremos  percorrer o array exibindo cada um de seus elementos ao contrario, por exemplo, &#8220;sergio&#8221; será exibido como &#8220;oigres&#8221;. Podemos criar um novo método para isso, então vamos ao trabalho:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> mostra_elementos_ao_contrario<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> elemento <span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#CC0066; font-weight:bold;">array</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> elemento.<span style="color:#9900CC;">reverse</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
mostra_elementos_ao_contrario<span style="color:#006600; font-weight:bold;">&#40;</span> lista <span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Perfeito! Mais uma vez concluímos nossa tarefa.</p>
<h2>DRY, mais um princípio de Desenvolvimento de Software:</h2>
<p>Os problemas anteriores envolviam operações com elementos de um array (uma lista), e assim acabamos criando dois métodos para resolver os problemas propostos. Existe um princípio de desenvolvimento de software que é focado em reduzir a repetição/duplicação de código, ele é conhecido como: <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">Don&#8217;t Repeat Yourself &#8211; (DRY)</a>. Este principio diz que:</p>
<blockquote>
<h4>&#8220;Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.&#8221;</h4>
</blockquote>
<p style="text-align: justify;">O que poderiamos traduzir como: <em>&#8220;Cada parte do conhecimento deve ter uma representação única e não ambigua dentro de um sistema&#8221;. </em>Desta forma utilizando o DRY para analisar as funções que escrevemos até agora, podemos notar que <em>a parte do conhecimento </em>de percorrer um array não possui <em>uma representação única</em> em nosso sistema. O ideal seria que o codigo de percorrer um array nao fosse mais repetido, e é exatamente nisso que vamos trabalhar agora.</p>
<h2>Aplicando o DRY</h2>
<p>A maneira mais simples de resolvemos o problema de duplicação do codigo de percorrer o array, é sem duvida realizar um refactor chamado <a href="http://sourcemaking.com/refactoring/extract-method">extract method</a>, e assim isolar a lógica de percorrer arrays em um método. Entao vamos lá:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> elemento <span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#CC0066; font-weight:bold;">array</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> mostra_elementos<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
   percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span><span style="color:#006600; font-weight:bold;">&#41;</span>
   <span style="color:#CC0066; font-weight:bold;">puts</span> elemento
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> mostra_elementos_ao_contrario<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
  percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0066; font-weight:bold;">array</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> elemento.<span style="color:#9900CC;">reverse</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
lista = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;sergio&quot;</span>,<span style="color:#996600;">&quot;roberto&quot;</span>, <span style="color:#996600;">&quot;iuri&quot;</span>,<span style="color:#996600;">&quot;luiz&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
mostra_elementos<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span>
mostra_elementos_ao_contrario<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Pronto! Com este método que acabamos de criar eliminamos o problema de  repetição de código. Porém ao executar este programa receberemos uma mensagem de erro. O grande problema aqui é que agora os métodos <em>mostra_elementos </em>e <em>mostra_elementos_ao_contrario</em> não conseguem mais acessar cada elemento do array. Estes métodos agora usam a função percorre_array, e somente dentro desta função é que a variavel <em>elemento</em> existe. Neste ponto podemos pensar que, ou fazemos a coisa ficar DRY, ou fazemos o programa funcionar. Calma, com Ruby nos poderemos fazer isso funcionar e ainda ser DRY. Para isso só precisamos aprender a usar os famosos blocos do Ruby.</p>
<h2>Ruby block&#8217;s</h2>
<p>Com certeza você já ouviu, que tudo em ruby é objeto. Na verdade mesmo, quase tudo em Ruby é objeto, por exemplo blocos de código não são objetos. Mas o importante é  que  em Ruby podemos armazenar trechos de código em um objeto especial que se chama Proc. Veja:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">bloco = <span style="color:#CC0066; font-weight:bold;">Proc</span>.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;sou um bloco de codigo&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
bloco.<span style="color:#9900CC;">call</span></pre></div></div>

<p>Acabamos de criar um objeto, que contem código, e fizemos isso utilizando Proc.new e fornecendo o código através das chaves  &#8221;{ }&#8221;. De posse de uma Proc, podemos executar o código que ela contem a qualquer momento. Basta pra isso usar o método call da Proc. No exemplo acima ao chamar <em>bloco.call </em>veremos o texto <em>s</em><em>ou um bloco de codigo<strong>.</strong><span style="font-style: normal;"> O interessante disso é que agora podemos passar </span> código </em> como parametro, veja um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> faco_o_que_mandar<span style="color:#006600; font-weight:bold;">&#40;</span> block <span style="color:#006600; font-weight:bold;">&#41;</span>
  block.<span style="color:#9900CC;">call</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
bloco = <span style="color:#CC0066; font-weight:bold;">Proc</span>.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;sou um bloco de codigo&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
faco_o_que_mandar<span style="color:#006600; font-weight:bold;">&#40;</span>bloco<span style="color:#006600; font-weight:bold;">&#41;</span>
faco_o_que_mandar <span style="color:#CC0066; font-weight:bold;">Proc</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Mais um bloco&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Mas podemos fazer como os rubistas fazem na maioria das vezes. Eles chamam a função e passam o bloco como parametro, para isso precisamos fazer uma pequena alteração em nossa função, basta colocar um <strong>&#038;</strong> a frente do nome do nosso parametro. Outra coisa é que geralmente os rubistas utilizam a plavara <strong>yield</strong> ao invés de coisas como <strong>bloco.call</strong>, vamos mudar isso também:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> faco_o_que_mandar<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#006600; font-weight:bold;">&amp;</span>block <span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">yield</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
faco_o_que_mandar <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;sou um bloco de codigo tipo rubista&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
faco_o_que_mandar <span style="color:#9966CC; font-weight:bold;">do</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;blocos do end sao usados quando vc quer&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;fazer coisas que precisem de mais de uma&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;linha =)&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>O grande barato é que agora escrevemos uma função que recebe e executa um código &#8220;visitante&#8221;. Este é um recurso muito poderoso, e é graças a ele que vamos conseguir resolver o problema de percorrer um array para fazer coisas diferentes com seus elementos, sem precisar repetir código.</p>
<h2>Tirando vantagem dos blocos</h2>
<p>Bem, nós já temos uma função que sabe andar em um array. Agora só precisamos fazer esta função receber um bloco de código &#8220;visitante&#8221; e assim teremos tudo resolvido. Vamos então ao trabalho:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block <span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> elemento <span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#CC0066; font-weight:bold;">array</span>
    <span style="color:#9966CC; font-weight:bold;">yield</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
lista = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;sergio&quot;</span>,<span style="color:#996600;">&quot;roberto&quot;</span>, <span style="color:#996600;">&quot;iuri&quot;</span>,<span style="color:#996600;">&quot;luiz&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0066; font-weight:bold;">puts</span> elemento <span style="color:#006600; font-weight:bold;">&#125;</span>
percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0066; font-weight:bold;">puts</span> elemento.<span style="color:#9900CC;">reverse</span> <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p><em>Neste momento você pode estar se perguntando o porquê do bloco de código estar fora dos parênteses. Por mais estranho que possa parecer é desse jeito que funciona mesmo. Os blocos são informados depois dos parametros &#8220;convencionais&#8221;.</em></p>
<p>Agora seria ótimo se isso funcionasse, não é? Pena que não vai funcionar. Ao executar esse código veremos o seguinte erro: <span style="color: #ff0000;">undefined local variable or method `elemento&#8217; for main:Object (NameError).</span></p>
<p><span style="color: #ff0000;"><span style="color: #000000;">Repare no erro, ele diz que a variavel <em>elemento </em>não está definida. Isso aconteceu porque esta variavel é local do método <em>percorre_array</em>, ou seja só existe, e só é visivel naquele método. Nós precisamos manipular esta variavel, para que isto seja possível o método que <strong>possui</strong> a variavel precisa permitir que os blocos visitantes utilizem esta variavel. Fazer isso é simples, basta que no <strong>yield</strong> nos passemos a variavel em questão como parâmetro. </span></span></p>
<p><span style="color: #ff0000;"><span style="color: #000000;">Quando colocamos o  <strong>yield</strong> na função é como se dissesemos: &#8220;Rode o codigo visitante agora&#8221;. E quando colocamos a frente do <strong>yield</strong> parâmetros é como se dissessemos: &#8220;Ei código vistante, se você quiser pode usar estes caras aqui que eu tenho&#8221;. Vejamos como fica isso no nosso codigo:</span></span></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0066; font-weight:bold;">array</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block <span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> elemento <span style="color:#9966CC; font-weight:bold;">in</span> <span style="color:#CC0066; font-weight:bold;">array</span>
    <span style="color:#008000; font-style:italic;">#agora estamos expondo a variavel elemento</span>
    <span style="color:#008000; font-style:italic;"># para o codigo visitante</span>
    <span style="color:#9966CC; font-weight:bold;">yield</span> elemento
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
lista = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;sergio&quot;</span>,<span style="color:#996600;">&quot;roberto&quot;</span>, <span style="color:#996600;">&quot;iuri&quot;</span>,<span style="color:#996600;">&quot;luiz&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#008000; font-style:italic;"># uma pequena alteracao é necessaria aqui</span>
percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>elemento<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">puts</span> elemento <span style="color:#006600; font-weight:bold;">&#125;</span>
percorre_array<span style="color:#006600; font-weight:bold;">&#40;</span>lista<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>elemento<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> elemento.<span style="color:#9900CC;">reverse</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Agora sim o código funciona. A linha<em></em> <em>yield elemento</em>, tem o efeito de enviar para o bloco visitante a variavel <em>elemento </em>como parametro. Assim a cada iteracao do loop for um novo valor é enviado ao código visitante através da variavel <em>elemento.</em> Com isso nosso trabalho está terminado, implementamos as funcionalidades solicitadas, sem repetir código, e de quebra aprendemos sobre DRY e blocos de código em Ruby.</p>
<p>Bloco de código é um assunto bem interessante, e aqui nós abordamos só uma pequena parte. Tem ainda um lance de lambdas, enfim como disse antes o assunto é muito interessante, e se você quiser saber mais pode olhar um post do Anderson Leite sobre isso, <a href="http://andersonleiteblog.wordpress.com/2010/02/18/metaprogramacao-procs-lambdas-e/">o link é este</a>.</p>
<p>Abraços.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sagadoprogramador.com.br/2010/02/dry-e-blocos-de-codigo-com-ruby/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Aprenda Ruby parte V &#8211; Métodos</title>
		<link>http://www.sagadoprogramador.com.br/2009/07/aprenda-ruby-parte-v-metodos/</link>
		<comments>http://www.sagadoprogramador.com.br/2009/07/aprenda-ruby-parte-v-metodos/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 17:50:46 +0000</pubDate>
		<dc:creator>Iuri Menescal</dc:creator>
				<category><![CDATA[OO]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby para iniciantes]]></category>
		<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[aprenda ruby]]></category>
		<category><![CDATA[Tutorial Ruby]]></category>

		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=277</guid>
		<description><![CDATA[Nesse artigo vamos conhecer um pouco de métodos em Ruby. Você, programador experiente deve estar pensando &#8220;Não deve ter nada de muito diferente..&#8221; vamos ver o que você acha até o final desse post. Estrutura O Método em Ruby é declarado da seguinte forma: def nomeDoMetodo #código end Só isso? Não tenho que dizer o [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse artigo vamos conhecer um pouco de métodos em Ruby. Você, programador experiente deve estar pensando <em>&#8220;Não deve ter nada de muito diferente..&#8221;</em> vamos ver o que você acha até o final desse post.</p>
<p><strong>Estrutura</strong></p>
<p>O Método em Ruby é declarado da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> nomeDoMetodo
   <span style="color:#008000; font-style:italic;">#código</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Só isso?<br />
Não tenho que dizer o que ele retorna?<br />
Ou dizer que ele não retorna nada <em>&#8220;void&#8221;</em> ?<br />
É isso mesmo, no Ruby você não precisa definir o que o seu método retorna, também não temos obrigação de utilizar <em>&#8220;return&#8221;</em> o nosso método sempre vai retornar o ultimo valor atribuído.<br />
É tão simples que deve ter ficado difícil de você visualizar:). Vamos ver um exemplo:</p>
<p><span id="more-277"></span></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># criando um método chamado teste</span>
<span style="color:#9966CC; font-weight:bold;">def</span> teste
  valor = <span style="color:#006666;">1</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#008000; font-style:italic;">#chamando esse método</span>
teste
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">1</span></pre></div></div>

<h2><strong>Parâmetros</strong></h2>
<p>O modo de passar parâmetros para um método em Ruby, é quase parecido com o das <a href="http://www.sagadoprogramador.com.br/?p=199">linguagens chatas</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"> <span style="color:#9966CC; font-weight:bold;">def</span> nomeDoMetodo<span style="color:#006600; font-weight:bold;">&#40;</span>parametro1,parametro2<span style="color:#006600; font-weight:bold;">&#41;</span>
    valor = parametro1 <span style="color:#006600; font-weight:bold;">+</span> parametro2
 <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Ok! a similaridade com as  <a href="http://www.sagadoprogramador.com.br/?p=199">linguagens chatas</a> para por aqui.<br />
Uma das coias legais de se trabalhar com uma linguagem dinamica é essa, note que não precisamos definir tipos para o parâmetro, isso nos da uma grande flexibilidade!<br />
Você não acha?<br />
<strong>Não!?</strong> <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  e se eu disser para você que a flexibilidade não se limita a isso, e se eu disser que podemos também, passar um numero indeterminado de parâmetros para o nosso método?<br />
<em>você não acredita? vamos ver um exemplo então: </em></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#008000; font-style:italic;"># note como declaro o parâmetro no método</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> teste<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>parametros<span style="color:#006600; font-weight:bold;">&#41;</span>
    parametros.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>parametro<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">puts</span> parametro <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#008000; font-style:italic;">#chamando o método</span>
  teste<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006666;">1</span>
  <span style="color:#006666;">2</span>
  <span style="color:#006666;">3</span>
  =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>Para finalizar esse post, vou dar um exemplo que os programadores Delphi vão adorar.</p>
<p><em>Caramba senti muita falta disso, quando comecei a programar em Java <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  </em></p>
<p>Nos métodos em Ruby é possivel definir um valor default para o parâmetro. Heeeee!!!</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#9966CC; font-weight:bold;">def</span> teste<span style="color:#006600; font-weight:bold;">&#40;</span>parametro=<span style="color:#996600;">&quot;Não foi passado nenhum valor&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    parametro
  <span style="color:#9966CC; font-weight:bold;">end</span>
  teste<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;novo valor&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; novo valor
  teste
  =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; Não foi passado nehum valor</pre></div></div>

<p><em>pode falar&#8230; agora eu consegui te impressionar!</em> <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Por enquanto vamos ficar por aqui, mas ainda temos muito para ver sobre métodos em Ruby.<br />
Aguardem o próximo post.</p>
<p>Abraço!</p>
<p>Iuri Menescal</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sagadoprogramador.com.br/2009/07/aprenda-ruby-parte-v-metodos/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Aprenda Ruby &#8211; parte IV &#8211; mais um pouco sobre Array</title>
		<link>http://www.sagadoprogramador.com.br/2009/06/aprenda-ruby-parte-iv-mais-um-pouco-sobre-array/</link>
		<comments>http://www.sagadoprogramador.com.br/2009/06/aprenda-ruby-parte-iv-mais-um-pouco-sobre-array/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 22:11:19 +0000</pubDate>
		<dc:creator>Iuri Menescal</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby para iniciantes]]></category>
		<category><![CDATA[aprenda ruby]]></category>
		<category><![CDATA[Tutorial Ruby]]></category>

		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=262</guid>
		<description><![CDATA[Nessa sequência de artigos sobre Ruby, venho tentando escrever artigos que não sejam muito extensos, justamente para que você aprenda Ruby ao modo Ruby, ou seja, prático, rápido e simples. Mas depois de publicar o último post, tive um retorno tão bom que fiquei empolgado em escrever outro logo . Alem disso, fiquei com uma [...]]]></description>
			<content:encoded><![CDATA[<p>Nessa sequência de artigos sobre Ruby, venho tentando escrever artigos que não sejam muito extensos, justamente para que você aprenda Ruby ao modo Ruby, ou seja, prático, rápido e simples.</p>
<p>Mas depois de publicar o último post, tive um retorno tão bom que fiquei empolgado em escrever outro logo <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . <br />
Alem disso, fiquei com uma sensação de que estava faltando alguma coisa, como disse antes o foco não é mostrar os métodos de cada classe do Ruby, mas o Array em Ruby é tão maneiro que eu tinha que mostrar mais algumas coisas legais.</p>
<p><span id="more-262"></span></p>
<p>No post anterior eu disse que uma das coisas que me desanimou no Array, quando comecei a programar, era a dificuldade de recuperar os dados, então aqui vai mais alguns exemplos de como o Ruby resolve esse problema:</p>
<p><b>Ordenação</b></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#o método sort ordena os valores em ordem alfabética</span>
meuArray = <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#40;</span>Alagoas Rio\ de\ Janeiro Brasília<span style="color:#006600; font-weight:bold;">&#41;</span> 
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Alagoas&quot;</span>,<span style="color:#996600;">&quot;Rio de Janeiro&quot;</span>,<span style="color:#996600;">&quot;Brasilia&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#008000; font-style:italic;">#presto atenção na &quot;\&quot; para escrever algo com espaço dentro do mesmo item do array?</span>
<span style="color:#008000; font-style:italic;">#agora vamos ordenar por nome</span>
meuArray.<span style="color:#9900CC;">sort</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Alagoas&quot;</span>,<span style="color:#996600;">&quot;Brasilia&quot;</span>,<span style="color:#996600;">&quot;Rio de Janeiro&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></td></tr></table></div>

<p>Grande coisa o exemplo acima, qual é a linguagem que não faz isso, né?<br />
Então, vamos jogar um pouco do pó mágico do Ruby e deixar o próximo exemplo mais atraente.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">meuArray = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Alagoas&quot;</span>,<span style="color:#996600;">&quot;Brasilia&quot;</span>,<span style="color:#996600;">&quot;Rio de Janeiro&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Alagoas&quot;</span>,<span style="color:#996600;">&quot;Brasilia&quot;</span>,<span style="color:#996600;">&quot;Rio de Janeiro&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#008000; font-style:italic;">#olha o que podemos fazer acrescentando um bloco no final</span>
<span style="color:#008000; font-style:italic;">#vamos ordenar ao contrario agora </span>
<span style="color:#008000; font-style:italic;">#mas lembre-se que você pode passar N condições </span>
<span style="color:#008000; font-style:italic;">#pois estamos trabalhando com blocos!</span>
&nbsp;
meuArray.<span style="color:#9900CC;">sort</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x,y<span style="color:#006600; font-weight:bold;">|</span> y <span style="color:#006600; font-weight:bold;">&lt;=&gt;</span> x<span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Rio de Janeiro&quot;</span>, <span style="color:#996600;">&quot;Brasília&quot;</span>, <span style="color:#996600;">&quot;Alagoas&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></td></tr></table></div>

<p><b>Pesquisa</b></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">estados = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;RJ&quot;</span>,<span style="color:#996600;">&quot;MG&quot;</span>,<span style="color:#996600;">&quot;SP&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;RJ&quot;</span>,<span style="color:#996600;">&quot;MG&quot;</span>,<span style="color:#996600;">&quot;SP&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#008000; font-style:italic;">#Quero confirmar se nesse Array </span>
<span style="color:#008000; font-style:italic;">#realmente existe o estado &quot;Rio de Janeiro&quot;</span>
estados.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;RJ&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#Agora queremos saber se algum item do meu array possui a letra &quot;S&quot;</span>
estados.<span style="color:#9900CC;">any</span>? <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>item<span style="color:#006600; font-weight:bold;">|</span> item.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;S&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#008000; font-style:italic;">#e se eu quiser saber se todos os itens do meu array possui a letra &quot;S&quot;?</span>
<span style="color:#008000; font-style:italic;">#simples!</span>
estados.<span style="color:#9900CC;">all</span>? <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>item<span style="color:#006600; font-weight:bold;">|</span> item.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;S&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#quero separar do meu array os estados com letra &quot;S&quot;</span>
estadosComS, estadosSemS = estados.<span style="color:#9900CC;">partition</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>item<span style="color:#006600; font-weight:bold;">|</span> item.<span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;S&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
estadosComS
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;SP&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
estadosSemS
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;RJ&quot;</span>,<span style="color:#996600;">&quot;MG&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></td></tr></table></div>

<p>Olha só que linguagem linda! Notem a expressividade desse código:<b> &#8220;include?&#8221; </b><br />
Eu quero saber se o meu array de estados contem o estado &#8220;RJ&#8221;. Se eu quero saber algo sobre o meu array, eu tenho que perguntar para ele e uma pergunta deve terminar com interrogação, então: estados.include?(&#8220;RJ&#8221;).</p>
<p>Pode falar&#8230; da vontade de congelar esse projeto, que você ta desenvolvendo ai na sua empresa e reescreve tudo em Ruby, não é? rs&#8230;</p>
<p>Mais uma vez utilizei bastante o conceito de blocos, que é um dos grandes baratos do Ruby.</p>
<p>Logo irão surgir outros conceitos que vão me obrigar a ter a mesma postura, no próximo post vamos ver um pouco sobre lambdas, que é um outro recurso bem bacana.<br />
É importante fixar bem esses conceitos para programadores que vem de linguagens como Java, Delphi, C#, pois é mais difícil se acostumar com algo tão fora do trivial do seu dia a dia, é importante isso ficar na &#8220;veia&#8221;, para que você consiga lembrar de utilizar esses tipos de recursos quando precisar. Tenho certeza que isso vai facilitar muito a sua vida quando estiver programando em Ruby.</p>
<p>Acho que agora deu para fechar com chave de ouro o nosso estudo sobre arrays.</p>
<p>Até a próxima!</p>
<p>Iuri</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sagadoprogramador.com.br/2009/06/aprenda-ruby-parte-iv-mais-um-pouco-sobre-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprenda Ruby &#8211; parte III</title>
		<link>http://www.sagadoprogramador.com.br/2009/06/aprenda-ruby-parte-iii/</link>
		<comments>http://www.sagadoprogramador.com.br/2009/06/aprenda-ruby-parte-iii/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 01:22:09 +0000</pubDate>
		<dc:creator>Iuri Menescal</dc:creator>
				<category><![CDATA[OO]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby para iniciantes]]></category>
		<category><![CDATA[aprenda ruby]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[blocos]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Tutorial Ruby]]></category>

		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=244</guid>
		<description><![CDATA[String Acho que agora as coisas começam a ficar mais divertidas Não é minha intenção, ficar explicando cada classe básica do Ruby, acho que mais importante focarmos no conceito da linguagem, acredito que a melhor forma de aprender a programar é praticando, por tanto vou usar alguns exemplos utilizando funcionalidades da String e do Array, [...]]]></description>
			<content:encoded><![CDATA[<h3>String</h3>
<p>Acho que agora as coisas começam a ficar mais divertidas <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Não é minha intenção, ficar explicando cada classe básica do Ruby, acho que mais importante focarmos no conceito da linguagem, acredito que a melhor forma de aprender a programar é praticando, por tanto vou usar alguns exemplos utilizando funcionalidades da String e do Array, para explicar os conceitos e ao mesmo tempo mostrar como é produtivo programar em Ruby.</p>
<p>Para entender os recursos de cada classe, basta olhar a <a href="http://www.ruby-doc.org/">documentação do Ruby</a> que é bem abrangente.</p>
<p>Vamos ver alguns exemplos, de como podemos concatenar valores em uma string:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">variavel = <span style="color:#996600;">&quot;um dois tres&quot;</span>
variavel = variavel<span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">&quot; quatro cinco seis&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#pode ser assim também</span>
variavel = <span style="color:#996600;">&quot;um dois tres&quot;</span>
variavel <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">&quot; quatro cinco seis&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#Também podemos fazer assim</span>
variavel = <span style="color:#996600;">&quot;um dois tres&quot;</span>
variavel.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot; quatro cinco seis&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#ou melho ainda, esse é muito maneiro, o código fica claro!</span>
variavel = <span style="color:#996600;">&quot;um dois tres&quot;</span>
variavel <span style="color:#006600; font-weight:bold;">&amp;</span>lt;<span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#996600;">&quot; quatro cinco seis&quot;</span>
<span style="color:#008000; font-style:italic;">#alem de claro, esse tipo de atribuição é mais rápido.</span></pre></div></div>

<p>Viu por que Ruby é agil?<br />
- Até minha mãe entende que com esse simbolo &#8220;&lt;&lt;&#8221; estou inserindo uma valor na String <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
É claro que em java temos outros modos de concatenar valores em uma String, mas provavelmente alguns deles nos obriga a instanciar alguma classe utilitária como o <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder</a>, por exemplo.</p>
<p><span id="more-244"></span></p>
<p>Gostou? você ainda não viu nada, olha só que F0D@! :p</p>
<p><strong><em>Delete</em></strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#aqui eu quero remover todas as vogais de uma String</span>
<span style="color:#996600;">&quot;a b c d e f g h i &quot;</span>.<span style="color:#9900CC;">delete</span> <span style="color:#996600;">&quot;aeiou&quot;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">&quot;b c d f g h&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#podemos utilizar exceções.</span>
<span style="color:#008000; font-style:italic;">#vamos remover todas as vogais, exceto a vogal &quot;i&quot;</span>
<span style="color:#996600;">&quot;a b c d e f g h i&quot;</span>.<span style="color:#9900CC;">delete</span> <span style="color:#996600;">&quot;aeiou&quot;</span>, <span style="color:#996600;">&quot;^i&quot;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">&quot;b c d f g h i&quot;</span></pre></div></div>

<p>Quer ver mais?</p>
<pre class="ruby">#Conversão de case
"saga do programador".upcase
=&gt; "SAGA DO PROGRAMADOR"
"SAGA DO PROGRAMADOR".downcase
=&gt;"saga do programador"

#olha só que maneiro:
#veja como esse código é expressivo!
"saga do programador".include? "programador"
=&gt; true
#é esse tipo de coisa q faz a diferença
#quero saber quantos caracteres diferentes existem entre as Strings
"Iuri" &lt;=&gt; "Iure"
=&gt; 1
#agora eu quero tirar caracteres duplicados de uma String
"google".tr_s("o","o")
=&gt; "gogle"
"google".tr_s("o","")
=&gt; ggle</pre>
<p><strong>Arrays:</strong></p>
<p>Na boa! Quando comecei a programar, aprendi sobre Arrays com o velho Pascal, achei muito chato. Pelas dificuldades apresentandas para recuperar os dados.</p>
<p>Com a evolução das linguagens as coisas foram melhorando, mas definitivamente trabalhar com Arrays em linguagens dinâmicas, supera as expectativas!</p>
<p><strong>Vamos aos exemplos:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#Criando uma array em Ruby:</span>
meuArray = <span style="color:#006600; font-weight:bold;">&#91;</span>“um”, “dois”,<span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span>“um”,”dois”,<span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#008000; font-style:italic;">#Sim é isso mesmo! Eu posso ter tipos diferentes dentro do mesmo Array</span></pre></div></div>

<p>Olha com as coisas ficam ainda mais legais, quando nos aproveitamos das facilidades que a linguagem Ruby nos proporciona com o conceito de blocos:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">meuArray = <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#125;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>Alguma vez você imaginou preencher um Array de maneira tão simples, como no exemplo abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">meuArray = <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">5</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>n<span style="color:#006600; font-weight:bold;">|</span> n<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#125;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>No post <a href="../?p=199">anterior</a> eu finalizei com a seguinte pergunta:<br />
Tenho uma String com seguinte valor “um dois tres quatro cinco”, como você faria em uma linguagem chata para transformar essa String em um array contendo cinco itens?</p>
<p>Bom, existe N maneires de fazer isso em N linguagens, meu exemplo de linguagem chata, será em delphi, vamos a roubada rs.. :</p>

<div class="wp_syntax"><div class="code"><pre class="pascal" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Para facilitar, ao invés de utilizar um Array, vou usar a classe TStringList.</span>
<span style="color: #000000; font-weight: bold;">Var</span>
  valor<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">String</span>;
  listaValor<span style="color: #339933;">:</span> TStringList;
<span style="color: #000000; font-weight: bold;">begin</span>
  valor <span style="color: #339933;">:=</span> <span style="color: #ff0000;">'um dois tres quatro cinco'</span>;
  listaValor <span style="color: #339933;">:=</span> TStringList.<span style="color: #0066ee;">Create</span>;
  valor <span style="color: #339933;">:=</span> StringReplace<span style="color: #009900;">&#40;</span>valor<span style="color: #339933;">,</span><span style="color: #ff0000;">' '</span><span style="color: #339933;">,</span><span style="color: #ff0000;">','</span><span style="color: #339933;">,</span><span style="color: #009900;">&#91;</span>rfReplaceAll<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>;
  listaValor.<span style="color: #0066ee;">CommaText</span> <span style="color: #339933;">:=</span> valor;
<span style="color: #000000; font-weight: bold;">end</span>;</pre></div></div>

<p>Agora em Ruby:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#Preste atenção como é complexo rs...</span>
meuArray = <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#40;</span>um dois tres quatro cinco<span style="color:#006600; font-weight:bold;">&#41;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span>“um”,”dois”,”tres”,”quatro”,”cinco”<span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>Outros exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#Sim! O operador &quot;&amp;lt;&amp;lt;&quot; também funciona para o Array</span>
&nbsp;
meuArray = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>
meuArray <span style="color:#006600; font-weight:bold;">&amp;</span>lt;<span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#006666;">2</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">2</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>No incio desse topico sobre arrays, comentei que um dos grandes problemas de trabalhar com Arrays nas linguagens chatas, e a dificuldade para manipular os dados, vamos ver agora uma pequena amostra, das facilidades que o Ruby nos oferece para trabalhar com isso:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">meuArray = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span><span style="color:#006600; font-weight:bold;">&#93;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>,<span style="color:#006666;">2</span>,<span style="color:#006666;">3</span>,<span style="color:#006666;">4</span>,<span style="color:#006666;">5</span><span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#Retornar só os numero pares, mais uma vez vou me prevalecer do conceito de blocos.</span>
&nbsp;
arrayPares = meuArray.<span style="color:#CC0066; font-weight:bold;">select</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>valor<span style="color:#006600; font-weight:bold;">|</span> valor<span style="color:#006600; font-weight:bold;">%</span>2==<span style="color:#006666;">0</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">2</span>,<span style="color:#006666;">4</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>Bom, por enquanto é só!<br />
Acho que agora as coisas estão ficando mais com a cara do Ruby, pois deixamos de lado o bla bla e passamos para a pratica, algo mais produtivo, talvez você ainda não tenha notado, mas nesse post conseguimos trabalhar bastante um otimo conceito do Ruby que são os blocos. A intenção daqui para frente é utilizar exemplos de códigos, para expressar os conceitos das funcionalidades que essa maravilhosa linguagem nos proporciona <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Até a próxima!</p>
<p>Iuri Menescal</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sagadoprogramador.com.br/2009/06/aprenda-ruby-parte-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aprenda Ruby &#8211; Parte II</title>
		<link>http://www.sagadoprogramador.com.br/2009/04/aprenda-ruby-parte-ii/</link>
		<comments>http://www.sagadoprogramador.com.br/2009/04/aprenda-ruby-parte-ii/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 20:13:47 +0000</pubDate>
		<dc:creator>Iuri Menescal</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby para iniciantes]]></category>
		<category><![CDATA[aprenda ruby]]></category>
		<category><![CDATA[Iniciantes]]></category>
		<category><![CDATA[operadores]]></category>
		<category><![CDATA[Tutorial Ruby]]></category>
		<category><![CDATA[variáveis]]></category>

		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=232</guid>
		<description><![CDATA[Dando continuidade ao nosso papo, vou seguir a linha do primeiro post e falar mais sobre manipulação de variaveis. Eu sei que não é um assunto muito empolgante, ou melhor não é muito &#8220;Ruby&#8221; (ou seja Dinamico, Agil, Divertido), mas para ter um bom entendimento temos que consolidar os fundamentos. &#8220;Espero que o Luiz não [...]]]></description>
			<content:encoded><![CDATA[<p>Dando continuidade ao nosso papo, vou seguir a linha do <a href="http://www.sagadoprogramador.com.br/?p=199">primeiro post</a> e falar mais sobre manipulação de variaveis.</p>
<p>Eu sei que não é um assunto muito empolgante, ou melhor não é muito &#8220;Ruby&#8221; (ou seja Dinamico, Agil, Divertido), mas para ter um bom entendimento temos que consolidar os fundamentos.<br />
<em>&#8220;Espero que o <a href="http://www.sagadoprogramador.com.br/?p=169">Luiz</a> não leia isto rs.. &#8220;piada interna&#8221; hehe!&#8221;</em></p>
<p>Mas logo logo vamos entrar na parte legal, pense nessa fase como o primeiro periodo da faculdade, só que  com mais serventia <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Como falei anteriormente tudo em Ruby é objeto. Variaveis são apenas referencias para objetos e bla bla bla bla&#8230;</p>
<p><strong><em>Vamos ver mais alguns exemplos:</em></strong></p>
<p><strong><em></em></strong><span id="more-232"></span><a href="http://www.sagadoprogramador.com.br/wp-content/uploads/2009/04/post2_exemplo1.jpg"><img class="aligncenter size-full wp-image-234" title="Exemplo 1" src="http://www.sagadoprogramador.com.br/wp-content/uploads/2009/04/post2_exemplo1.jpg" alt="" width="360" height="279" /></a></p>
<p>Viu? o valor1 ficou com o mesmo valor2, isso por que as duas variáveis são referencias para o mesmo objeto.<br />
Note que eu alterei a variável <strong><em>&#8220;Var2[5] = 2&#8243;</em></strong> ao invés de atribuir um outro valor para ela <strong><em>&#8220;var2 = valor2&#8243;</em></strong>, nesse ultimo caso eu estaria atribuindo um novo objeto String para a variável var2.<br />
Mas isso você já sabia né? hum&#8230; Você lembra de todo aquela papo de linguagem dinâmica e tipagem forte do primeiro post? Não? putz.. seu fanfarrão!  da uma olhada lá novamente: <a href="http://www.sagadoprogramador.com.br/?p=199">post1</a></p>
<p>Existem métodos que nos ajudam a manipular variáveis, como o método freeze que congela a variável e não permite que ela seja alterada.</p>
<p>Outro método legal é o método dup:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">variavel1 = <span style="color:#996600;">&quot;Valor1&quot;</span>
variavel2 = variavel1.<span style="color:#9900CC;">dup</span></pre></div></div>

<p>Esse método deveria ser usado no exemplo anterior, para impedir que as duas variáveis ficassem com a mesma referencia.</p>
<h3><strong>Operadores</strong></h3>
<p>Grande parte dos operadores são métodos e podem ser alterados.</p>
<table>
<tbody>
<tr>
<td>+,-,*</td>
<td>adição,subtração,multiplicação</td>
</tr>
<tr>
<td>/,%</td>
<td>divisão,resto</td>
</tr>
<tr>
<td>**</td>
<td>Expoente</td>
</tr>
<tr>
<td>&amp;</td>
<td>AND binario</td>
</tr>
<tr>
<td>^ ou |</td>
<td>OR binario</td>
</tr>
<tr>
<td>&gt;,&gt;=,&lt;,&lt;=</td>
<td>maior, maior ou igual, menor, menor ou igual</td>
</tr>
<tr>
<td>&lt;=&gt;,==,===,!=, =~, !~</td>
<td>Operadores de igualdade, você vai entender melhor nos próximos post`s</td>
</tr>
<tr>
<td>=, %=, -=, +=, /=,*=,**=, ||=, &amp;&amp;=, &lt;&lt;,</td>
<td>Atribuição</td>
</tr>
<tr>
<td><strong>Lógicos</strong></td>
<td></td>
</tr>
<tr>
<td>&amp;&amp;</td>
<td>AND</td>
</tr>
<tr>
<td>||</td>
<td>OR</td>
</tr>
<tr>
<td>.. e &#8230;</td>
<td>Ranges</td>
</tr>
<tr>
<td>? :</td>
<td>If Then else &#8220;Adoro esse <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8221;</td>
</tr>
<tr>
<td>not</td>
<td>negação</td>
</tr>
<tr>
<td>or e and</td>
<td>composição</td>
</tr>
</tbody>
</table>
<p>Durante nosso aprendizado, vamos ter oportunidade de ver mais detalhes de alguns operadores.<br />
Ai você vai começar a entender por quê programar em ruby é tão legal <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Só para deixar esse post menos chato, vamos ver um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#só quero atribuir um valor quando a variável for nil</span>
variavel = <span style="color:#006666;">1</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">1</span>
variavel <span style="color:#006600; font-weight:bold;">||</span>= <span style="color:#006666;">2</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">1</span>
variavel = <span style="color:#0000FF; font-weight:bold;">nil</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">nil</span>
variavel <span style="color:#006600; font-weight:bold;">||</span>= <span style="color:#006666;">2</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">2</span>
<span style="color:#008000; font-style:italic;">#agora o oposto</span>
variavel = <span style="color:#006666;">1</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">1</span>
variavel <span style="color:#006600; font-weight:bold;">&amp;</span>amp;<span style="color:#006600; font-weight:bold;">&amp;</span>amp;= <span style="color:#006666;">2</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">2</span>
variavel = <span style="color:#0000FF; font-weight:bold;">nil</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">nil</span>
variavel <span style="color:#006600; font-weight:bold;">&amp;</span>amp;<span style="color:#006600; font-weight:bold;">&amp;</span>amp;= <span style="color:#006666;">1</span>
=<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">nil</span></pre></div></div>

<p>Por enquanto é só, tenho certeza que já no próximo post, as coisas vão ficar mais empolgantes, ainda essa semana vou publicar a terceira parte aonde vamos ver alguns detalhes da classe String.<br />
Não deixe de continuar acompanhando, agora já passamos pela pior parte, o que vem pela frente é só diversão <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  tenho certeza que do decorrer dos exemplos que estão por vir você vai dizer algumas vezes &#8220;Caramba! que f0d@!!&#8221; :p</p>
<p>Fica aqui uma charada para o próximo post:</p>
<p>Tenho uma String com seguinte valor &#8220;um dois tres quatro cinco&#8221;, como você faria em uma <a href="http://www.sagadoprogramador.com.br/?p=199">linguagem chata</a> para transformar essa String em um array contendo cinco itens?</p>
<p>Abraço!</p>
<p>Iuri Menescal<br />
<em>Diga não as drogas, não use <a href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx">IE</a>!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sagadoprogramador.com.br/2009/04/aprenda-ruby-parte-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

