Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: gh-pages
Fetching contributors…

Cannot retrieve contributors at this time

207 lines (193 sloc) 17.068 kB
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Construções simples</title>
<meta name="author" content="" />
<!--- Blueprint CSS Framework -->
<link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection">
<link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print">
<!--[if IE]>
<link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection">
<![endif]-->
<!-- CodeRay syntax highlighting CSS -->
<link rel="stylesheet" href="css/coderay.css" type="text/css" />
<!-- Homepage CSS -->
<link rel="stylesheet" href="css/site.css" type="text/css" media="screen, projection" />
</head>
<body>
<div class="container">
<div class="column span-22 prepend-1 append-1 first last" id="header">
<h1 class="title"><a href="index.html" alt="voltar para o início">Tutorial de Ruby do GURU-SP</a></h1>
<hr>
</div>
<div class="column span-17 prepend-1 first">
<p class="title">Construções simples</p>
<p>Vamos explorar algumas construções simples disponíveis no Ruby. O exemplo abaixo <strong>p014constructs.rb</strong> ilustra as construções <strong>if</strong> e <strong>else</strong>. Por convenção, <strong>if</strong> e <strong>while</strong> não necessitam de parênteses.</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c"># No Ruby nil e false são interpretados como false (falso),</span>
<span class="no"> 2</span> <span class="c"># todo o restante (incluindo true e 0) siginificam true (verdadeiro)</span>
<span class="no"> 3</span> <span class="c"># nil é um objeto real</span>
<span class="no"> 4</span> <span class="c"># if else end (se, caso contrário, fim)</span>
<span class="no"> 5</span> var = <span class="i">5</span>
<span class="no"> 6</span> <span class="r">if</span> var &gt; <span class="i">4</span>
<span class="no"> 7</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">A variável é maior que 4</span><span class="dl">&quot;</span></span>
<span class="no"> 8</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Posso ter múltiplas declarações aqui</span><span class="dl">&quot;</span></span>
<span class="no"> 9</span> <span class="r">if</span> var == <span class="i">5</span>
<span class="no"><strong>10</strong></span> puts <span class="s"><span class="dl">&quot;</span><span class="k">É possível ter if else aninhados</span><span class="dl">&quot;</span></span>
<span class="no">11</span> <span class="r">else</span>
<span class="no">12</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Muito legal</span><span class="dl">&quot;</span></span>
<span class="no">13</span> <span class="r">end</span>
<span class="no">14</span> <span class="r">else</span>
<span class="no">15</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">A variável não é maior que 4</span><span class="dl">&quot;</span></span>
<span class="no">16</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Posso ter múltiplas declarações aqui</span><span class="dl">&quot;</span></span>
<span class="no">17</span> <span class="r">end</span>
</pre>
</div>
<p>Um exemplo do uso do elsif está no programa p015elsifex.rb como mostrado abaixo:</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c"># p015elsifex.rb</span>
<span class="no"> 2</span> <span class="c"># exemplo elseif</span>
<span class="no"> 3</span>
<span class="no"> 4</span> <span class="c"># Exemplo original</span>
<span class="no"> 5</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Olá, qual é o seu nome?</span><span class="dl">&quot;</span></span>
<span class="no"> 6</span> <span class="co">STDOUT</span>.flush
<span class="no"> 7</span> nome = gets.chomp
<span class="no"> 8</span> puts <span class="s"><span class="dl">'</span><span class="k">Olá, </span><span class="dl">'</span></span> + nome + <span class="s"><span class="dl">'</span><span class="k">.</span><span class="dl">'</span></span>
<span class="no"> 9</span>
<span class="no"><strong>10</strong></span> <span class="r">if</span> nome == <span class="s"><span class="dl">'</span><span class="k">Satish</span><span class="dl">'</span></span>
<span class="no">11</span> puts <span class="s"><span class="dl">'</span><span class="k">Que nome legal!!</span><span class="dl">'</span></span>
<span class="no">12</span> <span class="r">else</span>
<span class="no">13</span> <span class="r">if</span> name == <span class="s"><span class="dl">'</span><span class="k">Sunil</span><span class="dl">'</span></span>
<span class="no">14</span> puts <span class="s"><span class="dl">'</span><span class="k">Outro nome legal!</span><span class="dl">'</span></span>
<span class="no">15</span> <span class="r">end</span>
<span class="no">16</span> <span class="r">end</span>
<span class="no">17</span>
<span class="no">18</span> <span class="c"># Exemplo modificado com elsif</span>
<span class="no">19</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Olá, qual é o seu nome?</span><span class="dl">&quot;</span></span>
<span class="no"><strong>20</strong></span> <span class="co">STDOUT</span>.flush
<span class="no">21</span> nome = gets.chomp
<span class="no">22</span> puts <span class="s"><span class="dl">'</span><span class="k">Hello, </span><span class="dl">'</span></span> + nome + <span class="s"><span class="dl">'</span><span class="k">.</span><span class="dl">'</span></span>
<span class="no">23</span>
<span class="no">24</span> <span class="r">if</span> nome == <span class="s"><span class="dl">'</span><span class="k">Satish</span><span class="dl">'</span></span>
<span class="no">25</span> puts <span class="s"><span class="dl">'</span><span class="k">Que nome legal!!</span><span class="dl">'</span></span>
<span class="no">26</span> <span class="r">elsif</span> nome == <span class="s"><span class="dl">'</span><span class="k">Sunil</span><span class="dl">'</span></span>
<span class="no">27</span> puts <span class="s"><span class="dl">'</span><span class="k">Outro nome legal!</span><span class="dl">'</span></span>
<span class="no">28</span> <span class="r">end</span>
<span class="no">29</span>
<span class="no"><strong>30</strong></span> <span class="c"># Outra modificação</span>
<span class="no">31</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Olá, qual é o seu nome?</span><span class="dl">&quot;</span></span>
<span class="no">32</span> <span class="co">STDOUT</span>.flush
<span class="no">33</span> nome = gets.chomp
<span class="no">34</span> puts <span class="s"><span class="dl">'</span><span class="k">Olá, </span><span class="dl">'</span></span> + nome + <span class="s"><span class="dl">'</span><span class="k">.</span><span class="dl">'</span></span>
<span class="no">35</span>
<span class="no">36</span> <span class="c"># || é o operador lógico OU</span>
<span class="no">37</span> <span class="r">if</span> nome == <span class="s"><span class="dl">'</span><span class="k">Satish</span><span class="dl">'</span></span> || nome == <span class="s"><span class="dl">'</span><span class="k">Sunil</span><span class="dl">'</span></span>
<span class="no">38</span> puts <span class="s"><span class="dl">'</span><span class="k">Que nome legal!!</span><span class="dl">'</span></span>
<span class="no">39</span> <span class="r">end</span>
</pre>
</div>
<p>Alguns operadores condicionais comuns são: ==, !=, &gt;=, &lt;=, &gt;, &lt;</p>
<p>O <strong>unless</strong> (ao menos), como uma declaração ou modificador, é o oposto do <strong>if</strong>: ele executa o código somente se uma expressão associada é interpretada como nil ou falso. O construtor ruby <strong>unless</strong> começa com <strong>unless</strong> e termina com <strong>end</strong>.<br />
O corpo é o texto entre ambos.</p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="r">unless</span> <span class="pc">ARGV</span>.length == <span class="i">2</span>
<span class="no">2</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Uso: programa.rb 23 45</span><span class="dl">&quot;</span></span>
<span class="no">3</span> exit
<span class="no">4</span> <span class="r">end</span>
</pre>
</div>
<p>No programa acima, o corpo é executado ao menos que o número de elementos no array seja igual a 2 (o que significa que ambos<br />
os argumentos foram dados). O método Kernel.exit termina seu programa, retornando um valor de estado para o sistema operacional.</p>
<p>Loops como o <strong>while</strong> também estão disponíveis. O exemplo abaixo ilustra o uso do while.</p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="c"># Loops - imprime números de 0 a 9</span>
<span class="no">2</span> var = <span class="i">0</span>
<span class="no">3</span> <span class="r">while</span> var &lt; <span class="i">10</span>
<span class="no">4</span> puts var.to_s
<span class="no">5</span> var += <span class="i">1</span>
<span class="no">6</span> <span class="r">end</span>
</pre>
</div>
<h3>O condicional ?: (ou operador ternário)</h3>
<p>Como uma alternativa concisa aos operadores if/else podemos usar o operador condicional ou ternário <strong>?:</strong>. É o único operador ternário (com três operandos) no Ruby. Ele tem a seguinte estrutura básica:</p>
<div class="CodeRay">
<pre><span class="no">1</span> (condição) ? (resultado se a condição é verdadeira) : (resultado se a condição é falsa)
</pre>
</div>
<p>O primeiro operando aparece antes do ponto de interrogação. O segundo operando aparece entre o interrogação e os dois pontos. E o terceiro operando aparece depois dos dois pontos. O ponto de interrogação deve aparecer na mesma linha que o primeiro e o segundo argumentos e os dois pontos devem aparecer na mesma linha que o segundo argumento. O operador <strong>?:</strong> sempre avalia seu primeiro operando (a condição). Se a condição é qualquer coisa diferente de false ou nil, o valor da expressão é o valor do segundo operando. Caso contrário, se o primeiro operando for false ou nil, então o valor da expressão é o valor do terceiro operando. O operador <strong>?:</strong> age como uma declaração if/then/else compacta.<br />
Vamos ver um exemplo:</p>
<div class="CodeRay">
<pre><span class="no">1</span> idade = <span class="i">15</span>
<span class="no">2</span> <span class="c"># Falaremos da classe Range (intervalo) mais tarde</span>
<span class="no">3</span> <span class="c"># terá como saída adolescente</span>
<span class="no">4</span> puts (<span class="i">14</span>...<span class="i">20</span>).include?(idade) ? <span class="s"><span class="dl">&quot;</span><span class="k">adolescente</span><span class="dl">&quot;</span></span> : <span class="s"><span class="dl">&quot;</span><span class="k">não é adolescente</span><span class="dl">&quot;</span></span>
</pre>
</div>
<p>O operador ternário pode ser útil também para atribuições condicionais:</p>
<div class="CodeRay">
<pre><span class="no">1</span> idade = <span class="i">23</span>
<span class="no">2</span> pessoa = (<span class="i">14</span>...<span class="i">20</span>).include?(idade) ? <span class="s"><span class="dl">&quot;</span><span class="k">adolescente</span><span class="dl">&quot;</span></span> : <span class="s"><span class="dl">&quot;</span><span class="k">não é adolescente</span><span class="dl">&quot;</span></span>
<span class="no">3</span> puts pessoa <span class="c"># =&gt; &quot;não é adolescente&quot;</span>
</pre>
</div>
<h3>Modificadores de instrução</h3>
<p>Os modificadores de instrução do Ruby representam um atalho útil no caso em que o corpo de uma instrução <strong>if</strong> ou <strong>while</strong> é uma única<br />
expressão. Apenas escreva a expressão, seguida por <strong>if</strong> ou <strong>while</strong> e então a condição. Aqui, por exemplo, temos uma simples instrução if.</p>
<div class="CodeRay">
<pre><span class="no">1</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">Os registros pararao agora</span><span class="dl">&quot;</span></span> <span class="r">if</span> participantes &gt; <span class="i">2500</span>
</pre>
</div>
<h3>Expressões case</h3>
<p>Esta forma é bastante próxima a uma série de instruções <strong>if</strong>: ela permite que você liste uma série de condições e execute uma instrução correspondente a primeira que for verdadeira. Por exemplo, anos bissextos devem ser divisíveis por 400, ou divisíveis por 4 e não por 100. Além disso, lembre-se que o case retorna o valor da última expressão executada.</p>
<div class="CodeRay">
<pre><span class="no">1</span> ano = <span class="i">2000</span>
<span class="no">2</span> bissexto = <span class="r">case</span>
<span class="no">3</span> <span class="r">when</span> ano % <span class="i">400</span> == <span class="i">0</span> <span class="r">then</span> <span class="pc">true</span>
<span class="no">4</span> <span class="r">when</span> ano % <span class="i">100</span> == <span class="i">0</span> <span class="r">then</span> <span class="pc">false</span>
<span class="no">5</span> <span class="r">else</span> ano % <span class="i">4</span> == <span class="i">0</span>
<span class="no">6</span> <span class="r">end</span>
<span class="no">7</span> puts bissexto
<span class="no">8</span> <span class="c"># a saida é: true</span>
</pre>
</div>
<h3>nil é um objeto</h3>
<p>No Ruby, <strong>nil</strong> (que representa &#8220;nulo&#8221;) é um objeto real. Você pode chamar métodos no <strong>nil</strong>, assim como em qualquer outro objeto. Você pode adicionar métodos ao <strong>nil</strong>, assim como faz para outros objetos.</p>
<p><strong>nil</strong> e <strong>false</strong> são interpretados como <strong>false</strong> (falso), todo o restante (incluindo true e 0) são <strong>true</strong> (verdadeiro).</p>
<h3>A diferença entre FALSE e NIL</h3>
<p>Embora ainda tenhamos que falar sobre classes, aqui estão algumas informações adicionais. <strong>nil</strong> e <strong>false</strong> não são a mesma coisa.<br />
Ambos têm valor falso mas são objetos diferentes e lembre-se que tudo em Ruby é um objeto. Veja o seguinte programa:</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c"># Podemos determinar a classe de nosso objeto ou seu ID único de objeto</span>
<span class="no"> 2</span> <span class="c"># NIL é um sinônimo para nil</span>
<span class="no"> 3</span> puts <span class="co">NIL</span>.class <span class="c"># NilClass</span>
<span class="no"> 4</span> puts <span class="pc">nil</span>.class <span class="c"># NilClass</span>
<span class="no"> 5</span> puts <span class="pc">nil</span>.object_id <span class="c"># 4</span>
<span class="no"> 6</span>
<span class="no"> 7</span> <span class="c"># FALSE é um sinônimo para false</span>
<span class="no"> 8</span> puts <span class="co">FALSE</span>.class <span class="c"># FalseClass</span>
<span class="no"> 9</span> puts <span class="pc">false</span>.class <span class="c"># FalseClass</span>
<span class="no"><strong>10</strong></span> puts <span class="pc">false</span>.object_id <span class="c"># 0</span>
</pre>
</div>
<p>&nbsp;</p>
<div class="pagination"><a href="blocos-ruby.html">Blocos em Ruby &gt;</a></div>
</div>
<div class="column span-5 append-1 last">
<p><a href="http://www.guru-sp.org" title="Grupo de Usuários Ruby de SP"><img src="images/logo_guru-sp.jpg" title="Logo do GURU-SP" alt="Logo do Guru-SP" /></a></p>
<div class="box">
<p>Este material tem como base o <a href="http://www.rubylearning.com" title="Ruby Learning">tutorial do RubyLearning.com de Satish Talim</a> e foi traduzido por membros do <a href="http://www.guru-sp.org" title="Grupo de Usuários Ruby de SP">GURU-SP</a> com a permissão do autor.</p>
<p class="last">Ajude o RubyLearning participando em algum dos <a href="http://www.rubylearning.org" title="cursos do Ruby Learning">cursos pagos</a> ou <a href="http://pledgie.com/campaigns/415" title="Ajude o Ruby Learning">fazendo uma doação para o projeto</a></p>
</div>
<p class="quiet"><a href="index.html" title="índice">Voltar para o índice</a></p>
<h5></h5>
<p class="incr"></p>
</div>
<div class="column span-22 prepend-1 append-1 first last" id="footer">
<hr />
<p>Tuturial de Ruby do <a href="http://www.guru-sp.org" title="Grupo de Usuários Ruby de SP">GURU-SP</a>. Este site foi criado com <a href="http://webby.rubyforge.org">Webby</a></p>
</div>
</div>
</body>
</html>
Jump to Line
Something went wrong with that request. Please try again.