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

131 lines (117 sloc) 12.495 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>Nomes em Ruby</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">Nomes em Ruby</p>
<p><strong>Nomes em Ruby</strong> são usados para se referir a constantes, variáveis, métodos, classes e módulos. <em>O primeiro caractere de um nome ajuda o Ruby a distinguir o uso pretendido.</em> Determinados nomes são palavras reservadas e não deveriam ser utilizados como nome de variáveis, métodos, classes ou módulos. Letras minúsculas significa do caractere &#8220;a&#8221; até &#8220;z&#8221;. Letras maiúsculas significa &#8220;A&#8221; até &#8220;Z&#8221;, e dígitos significa &#8220;0&#8221; até &#8220;9&#8221;. Um nome é uma letra maiúscula, uma minúscula, ou um underscore (&#8220;_&#8221;), seguido por <strong>caracteres de nome</strong> (isso é uma combinação de letras maiúsculas e minúsculas, underscores e dígitos).</p>
<h2>Variáveis</h2>
<p>Variáveis no Ruby podem conter dados de qualquer tipo. Você pode usar variáveis em seus programas Ruby sem qualquer declaração. O nome de uma variável por si só denota seu escopo (local, global, instância, etc).</p>
<ul>
<li>O nome de uma variável <strong>local</strong> (declarada dentro de um objeto) consiste de uma letra minúscula (ou um underscore) seguido por caracteres de nome (azul, <em>z, bater_e</em>correr).</li>
<li>O nome de uma variável de <strong>instância</strong> (declarada dentro de um objeto sempre pertence a qualquer que seja o objeto que <strong>self</strong> se refira) começa com uma arroba (&#8220;@&#8221;) seguida por um nome (@assinatura, @_, @contador).</li>
<li>O nome de uma variável de <strong>classe</strong> (declarada dentro de uma classe) começa com duas arrobas (&#8220;@@&#8221;) seguidas de um nome (<code>@assinatura, @</code>_, @@contador). Uma variável de classe é compartilhada por todos os objetos de uma classe. Somente uma cópia de uma variável de classe particular existe para uma dada classe. Variáveis de classe usadas no nível mais alto são definidas em <strong>Object</strong> e se comportam como variáveis globais. Essas são raramente utilizadas em programas Ruby.</li>
<li>Variáveis <strong>globais</strong> começam com um símbolo de dólar (&#8220;$&#8221;) seguido por caracteres de nome. O nome de uma variável global também pode ser formado usando &#8220;$-&#8221; seguido por qualquer caractere único ($contador, $CONTADOR, $-x). O Ruby define uma série de variáveis globais que incluem outros caracteres de pontuação, como $_ e $-K.</li>
</ul>
<h2>Constantes</h2>
<p>O nome de uma <strong>constante</strong> começa com uma letra maiúscula seguida por caracteres de nome. Nomes de classes e módulos são constantes, e seguem a convenção de nomes de contantes. Exemplos: módulo MyMath, PI=3.1416, classe Pessoa.</p>
<h2>Nomes de Métodos</h2>
<p>Nomes de <strong>métodos</strong> deveriam começar com uma letra minúscula (ou um underscore). &#8220;?&#8221;, &#8220;!&#8221; e &#8220;=&#8221; são os únicos caracteres estranhos permitidos como sufixos em nomes de métodos (!, ou &#8216;bang&#8217;, rotula um método como especificamente perigoso, equivalentemente mais perigoso do que um método com o mesmo nome sem o &#8216;bang&#8217;. Veremos mais sobre isso depois em <a href="metodos-bang.html">Métodos &#8216;bang&#8217;</a>).</p>
<div class='box'>A convenção do Ruby é que se use underscores para separar palavras em um nome de método ou variável com mais de uma palavra. Por convenção, a maioria das constantes são escritas com letras maiúsculas e com underscores para separas as palavras, &#8216;DESSE_JEITO&#8217;. Os nomes de classes e módulos do Ruby são como as constantes, mas eles são convencionalmente escritos usando capitalização (letras iniciais maiúsculas), &#8216;DesseJeito&#8217;.<br />
É para se notar que uma variável pode, em momentos diferentes, fazer referência a objetos de diferentes tipos. Uma constante do Ruby também faz referência a um objeto. Uma constante é criada na primeira vez que é atribuído um valor a ela (normalmente em uma classe ou em uma definição de módulo; elas não devem ser definidas em um método &#8211; veremos mais sobre constantes depois em <a href="constantes.html">Constantes</a>). O Ruby deixa você alterar o valor de uma constante, mas isso irá gerar uma mensagem de aviso.</div>
<p>Um exemplo para demonstrar que o Ruby é dinamicamente tipado &#8211; <strong>p007dt.rb</strong></p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="c"># p007dt.rb</span>
<span class="no">2</span> <span class="c"># O Ruby é dinâmico</span>
<span class="no">3</span> x = <span class="i">7</span> <span class="c"># inteiro</span>
<span class="no">4</span> x = <span class="s"><span class="dl">&quot;</span><span class="k">casa</span><span class="dl">&quot;</span></span> <span class="c"># string</span>
<span class="no">5</span> x = <span class="fl">7.5</span> <span class="c"># real</span>
<span class="no">6</span>
<span class="no">7</span> <span class="c"># Em Ruby, tudo o que você manipula é um objeto</span>
<span class="no">8</span> <span class="s"><span class="dl">'</span><span class="k">Eu amo Ruby</span><span class="dl">'</span></span>.length
</pre>
</div>
<p>&nbsp;</p>
<p>Os tipos básicos no Ruby são <strong>Numeric</strong> (subtipos: <strong>Fixnum</strong>, <strong>Integer</strong> e <strong>Float</strong>), <strong>String</strong>, <strong>Array</strong>, <strong>Hash</strong>, <strong>Object</strong>, <strong>Symbol</strong>, <strong>Range</strong> e <strong>RegExp</strong>.</p>
<p>Em meu computador, o código:</p>
<div class="CodeRay">
<pre><span class="no">1</span> puts <span class="co">Float</span>::<span class="co">DIG</span>
</pre>
</div>
<p>imprime 15. E:</p>
<div class="CodeRay">
<pre><span class="no">1</span> puts <span class="co">Float</span>::<span class="co">MAX</span>
</pre>
</div>
<p>imprime 1.79769313486232e+308</p>
<p>Vamos dar uma olhada no exemplo de Peter Cooper em seu livro <em>Beginning Ruby</em>:</p>
<div class="CodeRay">
<pre><span class="no">1</span> arroz_no_quadrado = <span class="i">1</span>
<span class="no">2</span> <span class="i">64</span>.times <span class="r">do</span> |quadrado|
<span class="no">3</span> puts <span class="s"><span class="dl">&quot;</span><span class="k">No quadrado </span><span class="il"><span class="idl">#{</span>quadrado + <span class="i">1</span><span class="idl">}</span></span><span class="k"> há </span><span class="il"><span class="idl">#{</span>arroz_no_quadrado<span class="idl">}</span></span><span class="k"> grão(s)</span><span class="dl">&quot;</span></span>
<span class="no">4</span> arroz_no_quadrado *= <span class="i">2</span>
<span class="no">5</span> <span class="r">end</span>
</pre>
</div>
<p>Pelo quadrado 64 você estará colocando alguns trilhões de grãos de arroz em cada quadrado!</p>
<p>Isto prova que o Ruby é apto a lidar com números extremamente grandes e, diferente de outras linguagens de programação, não há limites inconvenientes. O Ruby faz isso com diferentes classes, uma chamada <strong>Fixnum</strong> (padrão) que representa pequenos números facilmente gerenciáveis, e outra, acertadamente chamada de <strong>Bignum</strong>, que representa números grandes que o Ruby precisa gerenciar internamente. O Ruby irá manipular a Bignums e a Fixnums para você, e você pode realizar cálculos aritméticos e outras operações sem nenhum problema. Os resultados podem variar dependendo da arquitetura do sistema, mas essas mudanças são manuseadas pelo Ruby internamente, não é preciso se preocupar.</p>
<p>O Ruby não requer que você use <a href="http://en.wikipedia.org/wiki/Primitive_type">primitivos</a> (<a href="http://en.wikipedia.org/wiki/Data_type">data types</a>) quando está manipulando dados desses tipos &#8211; se se parece com um inteiro, provavelmente é um inteiro; se se parece com uma string, provavelmente é uma string. A classe <strong>Object</strong> tem um método chamado <strong>class</strong> que retorna a classe de um objeto, por exemplo:</p>
<div class="CodeRay">
<pre><span class="no">1</span> s = <span class="s"><span class="dl">'</span><span class="k">olá</span><span class="dl">'</span></span>
<span class="no">2</span> s.class <span class="c"># String</span>
</pre>
</div>
<p>Outro exemplo (não se preocupe se você não entender o código agora):</p>
<div class="CodeRay">
<pre><span class="no">1</span> puts <span class="s"><span class="dl">'</span><span class="k">Eu estou na classe = </span><span class="dl">'</span></span> + <span class="pc">self</span>.class.to_s
<span class="no">2</span> puts <span class="s"><span class="dl">'</span><span class="k">Eu sou um objeto = </span><span class="dl">'</span></span> + <span class="pc">self</span>.to_s
<span class="no">3</span> print <span class="s"><span class="dl">'</span><span class="k">Os métodos do objeto são = </span><span class="dl">'</span></span>
<span class="no">4</span> puts <span class="pc">self</span>.private_methods.sort
</pre>
</div>
<p>Nós iremos falar sobre <a href="self.html">self</a> mais tarde. <strong>private_methods</strong> é um método da classe <strong>Object</strong> e <strong>sort</strong> é um método da classe <strong>Array</strong>.</p>
<p>Em Ruby, tudo o que você manipula é um objeto, e o resultado dessa manipulação também são objetos. Não existem primitivos ou data-types.</p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="i">5</span>.times { puts <span class="s"><span class="dl">&quot;</span><span class="k">Ratos!</span><span class="ch">\n</span><span class="dl">&quot;</span></span> } <span class="c"># mais sobre blocos depois</span>
<span class="no">2</span> <span class="s"><span class="dl">&quot;</span><span class="k">Elefantes gostam de amendoins</span><span class="dl">&quot;</span></span>.length
</pre>
</div>
<div class="pagination"><a href="mais-sobre-metodos.html">Mais sobre métodos 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.