CINXE.COM

Sobre o Ruby

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Sobre o Ruby</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta itemprop="image" content="https://www.ruby-lang.org/images/header-ruby-logo@2x.png"> <meta name="description" content=""> <link rel="stylesheet" type="text/css" href="/stylesheets/normalize.css"> <link rel="stylesheet" type="text/css" href="/stylesheets/main.css"> <link rel="stylesheet" type="text/css" href="/stylesheets/pygments.css"> <link rel="stylesheet" type="text/css" href="/stylesheets/mobile.css"> <link rel="stylesheet" type="text/css" href="/stylesheets/print.css"> <link href='https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic,700italic&amp;subset=latin,cyrillic,greek,vietnamese' rel='stylesheet' type='text/css'> <link rel="canonical" href="https://www.ruby-lang.org/pt/about/"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> <link href="/pt/feeds/news.rss" rel="alternate" title="Em português" type="application/rss+xml"> <script type="text/javascript" src="/javascripts/jquery.min.js"></script> <script type="text/javascript" src="/javascripts/page.js"></script> </head> <body> <div id="header"> <div id="header_content" class="container"> <a href="/pt/"> <h1>Ruby</h1> <h2>O melhor amigo do programador</h2> </a> <div class="site-links"> <a href="/pt/" class="home">Início</a> <a href="/pt/downloads/">Downloads</a> <a href="/pt/documentation/">Documentação</a> <a href="/pt/libraries/">Módulos</a> <a href="/pt/community/">Comunidade</a> <a href="/pt/news/">Notícias</a> <a href="/pt/security/">Segurança</a> <a href="/pt/about/">Sobre Ruby</a> <a href="#" class="menu selected">Menu</a> </div> <div id="search-box"> <form id="search-form" action="https://www.google.com/cse"> <table class="fieldset"> <tr> <td> <input class="field" type="text" name="q" size="31" style="background: white url(//www.google.com/coop/intl/pt/images/google_custom_search_watermark.gif) left no-repeat" onfocus="this.style.background='white'" onblur="if (/^\s*$/.test(this.value)) this.style.background='white url(//www.google.com/coop/intl/pt/images/google_custom_search_watermark.gif) left no-repeat'"/> </td> <td> <input type="hidden" name="cx" value="013598269713424429640:g5orptiw95w" /> <input type="hidden" name="ie" value="UTF-8" /> <input class="button" type="submit" name="sa" value="Procurar" /> </td> </tr> </table> </form> </div> </div> </div> <div id="page"> <div id="main-wrapper" class="container"> <div id="main"> <div id="content-wrapper"> <h1>Sobre o Ruby</h1> <div id="content"> <p class="summary">Já pensou porque é que o Ruby é tão popular? Os fãs dizem que é uma linguagem elegante, repleta de arte. E no entanto, dizem que é prática e conveniente. Afinal qual é o resultado?</p> <h3>Os Ideais do Criador do Ruby</h3> <p>O Ruby é uma linguagem com um cuidadoso equilíbrio. O seu criador, <a href="http://www.rubyist.net/~matz/">Yukihiro “Matz” Matsumoto</a>, uniu partes das suas linguagens favoritas (Perl, Smalltalk, Eiffel, Ada e Lisp) para formar uma nova linguagem que equilibra a programação funcional com a programação imperativa.</p> <p>Ele disse com frequência que está “tentando tornar o Ruby natural, não simples”, de uma forma que reflita a vida.</p> <p>Elaborando sobre isto, acrescenta:</p> <blockquote> <p>O Ruby é simples na aparência, mas muito complexo no interior, tal como o corpo humano<sup><a href="#fn1">1</a></sup>.</p> </blockquote> <h3>Sobre o Crescimento do Ruby</h3> <p>Desde que foi tornado público em 1995, o Ruby arrastou consigo programadores devotos em todo o mundo. Em 2006, o Ruby atingiu aceitação massiva, com a formação de grupos de usuários em todas as principais cidades do mundo e com as conferências sobre Ruby com lotação esgotada.</p> <p>A Ruby-Talk, a principal <a href="/pt/community/mailing-lists/">lista de e-mails</a> para a discussão sobre a linguagem Ruby atingiu uma média de 200 mensagens diárias em 2006. Recentemente a média caiu, já que o tamanho da comunidade distribuiu as discussões de uma lista central em muitos grupos menores.</p> <p>Ruby está posicionado entre no top 10 da maioria dos índices que medem o crescimento da popularidade de linguagens de programação pelo mundo todo (tais como o <a href="https://www.tiobe.com/tiobe-index/">índice TIOBE</a>). Muito deste crescimento é atribuído à popularidade de softwares escritos em Ruby, em particular o framework de desenvolvimento web <a href="http://rubyonrails.org/">Ruby on Rails</a>.</p> <p>O Ruby também é <a href="/en/about/license.txt">totalmente livre</a>. Não somente livre de custos, mas também livre para utilizar, copiar, modificar e distribuir.</p> <h3>Ver Tudo como um Objeto</h3> <p>Inicialmente, Matz estudou outras linguagens em busca de encontrar uma sintaxe ideal. Recordando a sua busca, disse, “Eu queria uma linguagem interpretada que fosse mais poderosa do que Perl e mais orientada as objetos do que Python<sup><a href="#fn2">2</a></sup>.”</p> <p>Em Ruby, tudo é um objeto. Cada parcela de informação e código podem receber as suas próprias propriedades e ações. A Programação orientada a objetos denomina as propriedades como <em>variáveis de instância</em> e as ações como <em>métodos</em>. A aproximação pura, da orientação aos objetos do Ruby, é geralmente demonstrada pelo seguinte trecho de código que aplica uma ação a um número.</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"Nós *amamos* o Ruby -- ele é fantástico!"</span> <span class="p">}</span></code></pre></figure> <p>Em muitas linguagens, números e outros tipos primitivos não são objetos. O Ruby segue a influência da linguagem Smalltalk em atribuir métodos e variáveis de instância a todos os seus tipos. Esta abordagem facilita a utilização do Ruby, uma vez que as regras que se aplicam aos objetos aplicam-se a tudo em Ruby.</p> <h3>A Flexibilidade do Ruby</h3> <p>O Ruby é visto como uma linguagem flexível, uma vez que permite aos seus utilizadores alterar partes da linguagem. Partes essenciais do Ruby podem ser removidas ou redefinidas à vontade. Partes existentes podem ser acrescentadas. O Ruby tenta não restringir o programador.</p> <p>Por exemplo, a adição é realizada com o operador mais (<code class="language-plaintext highlighter-rouge">+</code>). Mas, se preferir utilizar a palavra escrita <code class="language-plaintext highlighter-rouge">plus</code>, poderia adicionar esse método à classe nativa do Ruby <code class="language-plaintext highlighter-rouge">Numeric</code>.</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">Numeric</span> <span class="k">def</span> <span class="nf">plus</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="nb">self</span><span class="p">.</span><span class="nf">+</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">5</span><span class="p">.</span><span class="nf">plus</span> <span class="mi">6</span> <span class="c1"># y agora é igual a 11</span></code></pre></figure> <p>Os operadores do Ruby são açúcar sintático para métodos. Você também pode redefini-los.</p> <h3>Blocos, uma Característica Verdadeiramente Expressiva</h3> <p>Os blocos do Ruby são vistos como uma fonte de grande flexibilidade. Um programador pode adicionar uma <em>closure</em> a qualquer método, descrevendo como esse método deve se comportar. A <em>closure</em> é chamada de <em>bloco</em> e tornou-se uma das características mais populares para os recém chegados ao Ruby vindos de outras linguagens imperativas como o PHP ou o Visual Basic.</p> <p>Os blocos são inspirados nas linguagens funcionais. Matz disse, “nas <em>closures</em> em Ruby, eu quis respeitar a cultura do Lisp<sup><a href="#fn3">3</a></sup>”.</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="n">search_engines</span> <span class="o">=</span> <span class="sx">%w[Google Yahoo MSN]</span><span class="p">.</span><span class="nf">map</span> <span class="k">do</span> <span class="o">|</span><span class="n">engine</span><span class="o">|</span> <span class="s2">"http://www."</span> <span class="o">+</span> <span class="n">engine</span><span class="p">.</span><span class="nf">downcase</span> <span class="o">+</span> <span class="s2">".com"</span> <span class="k">end</span></code></pre></figure> <p>No código acima, o bloco é descrito dentro do trecho <code class="language-plaintext highlighter-rouge">do ... end</code>. O método <code class="language-plaintext highlighter-rouge">map</code> aplica o bloco à lista de palavras fornecida. Existem muitos outros métodos em Ruby que deixam em aberto a possibilidade para o programador escrever o seu próprio bloco que complete os detalhes do que esse método deveria fazer.</p> <h3>Ruby e o <em>Mixin</em></h3> <p>De forma diferente a muitas linguagens de programação orientadas a objeto, o Ruby suporta somente herança simples, <strong>propositadamente</strong>. Mas em Ruby existe o conceito de módulos (chamados categorias em Objective-C). Os módulos são coleções de métodos.</p> <p>As classes podem fazer o <em>mixin</em> de um modulo e receber todos os métodos do módulo diretamente. Por exemplo, qualquer classe que implemente o método <code class="language-plaintext highlighter-rouge">each</code> pode fazer o <em>mixin</em> do módulo <code class="language-plaintext highlighter-rouge">Enumerable</code>, que adiciona um conjunto de métodos que utilizam <code class="language-plaintext highlighter-rouge">each</code> para iterar.</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">MyArray</span> <span class="kp">include</span> <span class="no">Enumerable</span> <span class="k">end</span></code></pre></figure> <p>Geralmente os programadores de Ruby vêm esta abordagem como uma forma muito mais clara do que a herança múltipla, que é complexa e pode ser demasiado restritiva.</p> <h3>A Aparência Visual do Ruby</h3> <p>Apesar de o Ruby utilizar frequentemente pontuação muito limitada e geralmente preferir palavras em inglês, alguma pontuação é utilizada para decorar o Ruby. O Ruby não necessita de declarações de variáveis. Usa simples convenções de nomes para denotar o âmbito das variáveis.</p> <ul> <li><code class="language-plaintext highlighter-rouge">var</code> poderia ser uma variável local.</li> <li><code class="language-plaintext highlighter-rouge">@var</code> é uma variável de instância.</li> <li><code class="language-plaintext highlighter-rouge">$var</code> é uma variável global.</li> </ul> <p>Estes símbolos facilitam a leitura do código, permitindo ao programador identificar facilmente o papel de cada variável. Também deixa de ser necessário acrescentar um fastidioso sufixo <code class="language-plaintext highlighter-rouge">self.</code> a cada membro de uma instância.</p> <h3>Além do Básico</h3> <p>O Ruby é rico em outras características, entre as quais se destacam as seguintes:</p> <ul> <li> <p>Capacidade de tratamento de exceções, tal como em Java ou Python, de forma a facilitar o tratamento de erros.</p> </li> <li> <p>Um verdadeiro <em>garbage collector</em> <em>mark-and-sweep</em> para todos os objectos Ruby. Não é necessário manter contadores de referência em bibliotecas de extensão (<em>extension libraries</em>). Tal como Matz diz, “Isto é melhor para a sua saúde.”</p> </li> <li> <p>Escrever extensões C em Ruby é mais fácil do que em Perl ou Python, com uma API refinada para chamar Ruby a partir do código C. Isto inclui chamadas para embutir Ruby em software externo, para utilizá-lo como uma linguagem interpretada dentro do software. Uma interface SWIG também se encontra disponível.</p> </li> <li> <p>O Ruby pode carregar bibliotecas de extensão (<em>extension libraries</em>) dinamicamente se o Sistema Operacional permitir.</p> </li> <li> <p>O Ruby tem um sistema de <em>threading</em> independente do Sistema Operacional. Portanto, para todas as plataformas nas quais o Ruby roda, temos <em>multithreading</em> independentemente de o Sistema Operacional suportar ou não, temos <em>multithreading</em> até em MS-DOS!</p> </li> <li> <p>O Ruby é altamente portável: é desenvolvido principalmente em ambiente GNU/Linux, mas trabalha em muitos tipos de ambientes UNIX, macOS, Windows, DOS, BeOS, OS/2, etc.</p> </li> </ul> <h3>Outras Implementações do Ruby</h3> <p>O Ruby, como uma linguagem, tem algumas implementações diferentes. Esta página tem discutido a implementação de referência, frequentemente chamada pela comunidade de <strong>MRI</strong> (“<em>Matz’s Ruby Interpreter</em>”, o “Interpretador de Ruby do Matz”) ou <strong>CRuby</strong> (já que é escrito em C), mas também existem outras. Elas muitas vezes são úteis em determinadas situações, fornecem integração adicional a outras linguagens ou ambientes, ou têm características especiais que o MRI não possui.</p> <p>Segue uma lista:</p> <ul> <li><a href="http://jruby.org">JRuby</a> é Ruby sobre a JVM (<em>Java Virtual Machine</em>), utilizando os compiladores otimizados JIT da JVM, <em>garbage collectors</em>, threads concorrentes, seu ecossistema de ferramentas e sua vasta coleção de bibliotecas.</li> <li><a href="http://rubini.us">Rubinius</a> é “Ruby escrito em Ruby”. Construído em cima da LLVM, Rubinius utiliza uma elegante máquina virtual sobre a qual outras linguagens também estão sendo construídas.</li> <li><a href="http://www.mruby.org/">mruby</a> é uma implementação leve da linguagem Ruby que pode ser vinculada e embutida em uma aplicação. Seu desenvolvimento é conduzido pelo criador do Ruby, Yukihiro “Matz” Matsumoto.</li> <li><a href="http://www.ironruby.net">IronRuby</a> é uma implementação “fortemente integrada ao .NET Framework”.</li> <li><a href="http://maglev.github.io">MagLev</a> é “uma implementação rápida e estável do Ruby, com persitência de objetos integrada e cache compartilhado distribuído”.</li> <li><a href="https://github.com/parrot/cardinal">Cardinal</a> é um “compilador Ruby para a Máquina Virtual <a href="http://parrot.org">Parrot</a>” (Perl 6).</li> </ul> <h3>Referências</h3> <p id="fn1"><sup>1</sup> Matz, falando na lista de e-mails Ruby-Talk, <a href="https://blade.ruby-lang.org/ruby-talk/2773">12 Mai. 2000</a>.</p> <p id="fn2"><sup>2</sup> Matz, em <a href="http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html">An Interview with the Creator of Ruby</a>, 29 Nov. 2001.</p> <p id="fn3"><sup>3</sup> Matz, em <a href="http://www.artima.com/intv/closures2.html">Blocks and Closures in Ruby</a>, 22 December 2003.</p> </div> </div> <hr class="hidden-modern" /> <div id="sidebar-wrapper"> <div id="sidebar"> <div class="navigation"> <h3><strong>Primeiros passos</strong>, é fácil!</h3> <ul class="menu"> <li><a href="https://try.ruby-lang.org/">Try Ruby! (in your browser)</a></li> <li><a href="/pt/documentation/quickstart/">Ruby em Vinte Minutos</a></li> <li><a href="/pt/documentation/ruby-from-other-languages/">Ruby a partir de outras linguagens</a></li> </ul> </div> <div class="navigation"> <h3><strong>Explore</strong> um novo mundo…</h3> <ul class="menu"> <li><a href="/pt/documentation/">Documentação</a></li> <li><a href="/pt/libraries/">Bibliotecas</a></li> <li><a href="/pt/documentation/success-stories/">Histórias de sucesso</a></li> </ul> </div> <div class="navigation"> <h3><strong>Participe</strong> de uma comunidade simpática e em crescimento.</h3> <ul> <li><a href="/pt/community/mailing-lists/">Listas de E-mail</a>: Fale sobre Ruby com programadores de todo o mundo.</li> <li><a href="/pt/community/user-groups/">Grupos de Usuários</a>: Entre em contato com colegas da sua área.</li> <li><a href="/pt/community/weblogs/">Weblogs</a>: Leia sobre o que está acontecendo agora na comunidade Ruby.</li> <li><a href="/pt/community/ruby-core/">Ruby Core</a>: Ajude a polir as arestas da última versão do Ruby.</li> <li><a href="https://bugs.ruby-lang.org/">Issue Tracking</a>: Informe ou ajude a resolver problemas do Ruby.</li> </ul> </div> <h3>Feeds de notícias (RSS)</h3> <p><a href="/pt/feeds/news.rss">Em português</a></p> </div> </div> <hr class="hidden-modern" /> </div> </div> </div> <div class="container"> <div id="footer"> <div class="site-links"> <a href="/pt/" class="home">Início</a> <a href="/pt/downloads/">Downloads</a> <a href="/pt/documentation/">Documentação</a> <a href="/pt/libraries/">Módulos</a> <a href="/pt/community/">Comunidade</a> <a href="/pt/news/">Notícias</a> <a href="/pt/security/">Segurança</a> <a href="/pt/about/">Sobre Ruby</a> </div> <p> Este site em outros idiomas: <a href="/bg/">Български</a>, <a href="/de/">Deutsch</a>, <a href="/en/">English</a>, <a href="/es/">Español</a>, <a href="/fr/">Français</a>, <a href="/id/">Bahasa Indonesia</a>, <a href="/it/">Italiano</a>, <a href="/ja/">日本語</a>, <a href="/ko/">한국어</a>, <a href="/pl/">polski</a>, <a href="/pt/">Português</a>, <a href="/ru/">Русский</a>, <a href="/tr/">Türkçe</a>, <a href="/vi/">Tiếng Việt</a>, <a href="/zh_cn/">简体中文</a>, <a href="/zh_tw/">繁體中文</a>. </p> <p><a href="/pt/about/website/">Este website</a> é mantido com orgulho por membros da comunidade Ruby.</p> </div> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10