-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathconstrucoes-simples.html
206 lines (193 loc) · 16.7 KB
/
construcoes-simples.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<!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 > <span class="i">4</span>
<span class="no"> 7</span> puts <span class="s"><span class="dl">"</span><span class="k">A variável é maior que 4</span><span class="dl">"</span></span>
<span class="no"> 8</span> puts <span class="s"><span class="dl">"</span><span class="k">Posso ter múltiplas declarações aqui</span><span class="dl">"</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">"</span><span class="k">É possível ter if else aninhados</span><span class="dl">"</span></span>
<span class="no">11</span> <span class="r">else</span>
<span class="no">12</span> puts <span class="s"><span class="dl">"</span><span class="k">Muito legal</span><span class="dl">"</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">"</span><span class="k">A variável não é maior que 4</span><span class="dl">"</span></span>
<span class="no">16</span> puts <span class="s"><span class="dl">"</span><span class="k">Posso ter múltiplas declarações aqui</span><span class="dl">"</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">"</span><span class="k">Olá, qual é o seu nome?</span><span class="dl">"</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">"</span><span class="k">Olá, qual é o seu nome?</span><span class="dl">"</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">"</span><span class="k">Olá, qual é o seu nome?</span><span class="dl">"</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: ==, !=, >=, <=, >, <</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">"</span><span class="k">Uso: programa.rb 23 45</span><span class="dl">"</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 < <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">"</span><span class="k">adolescente</span><span class="dl">"</span></span> : <span class="s"><span class="dl">"</span><span class="k">não é adolescente</span><span class="dl">"</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">"</span><span class="k">adolescente</span><span class="dl">"</span></span> : <span class="s"><span class="dl">"</span><span class="k">não é adolescente</span><span class="dl">"</span></span>
<span class="no">3</span> puts pessoa <span class="c"># => "não é adolescente"</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">"</span><span class="k">Os registros pararao agora</span><span class="dl">"</span></span> <span class="r">if</span> participantes > <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 “nulo”) é 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> </p>
<div class="pagination"><a href="blocos-ruby.html">Blocos em Ruby ></a></div>
</div>
<div class="column span-5 append-1 last">
<p><a href="http://www.gurusp.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.gurusp.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.gurusp.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>