Ruby (linguagem de programação)
Origem: Wikipédia, a enciclopédia livre.
Ruby | |
---|---|
Paradigma | Multiparadigma |
Surgido em | 1995 |
Última versão | 1.9.2 (18 de agosto de 2010) |
Versão em teste | () |
Criado por | Yukihiro Matsumoto |
Estilo de tipagem: | dinâmica, forte |
Compiladores | |
Dialetos: | YARV, Ruby MRI, JRuby, Rubinius, IronRuby, MacRuby e HotRuby |
Influenciada por | Ada, CLU, Dylan, Eiffel, Lisp, Perl, Python, Scheme, Smalltalk |
Influenciou | Falcon, Fantom, Groovy, Ioke, Nu |
Licença: | Dupla: Ruby License / GNU General Public License |
Página oficial | www.ruby-lang.org |
A implementação 1.8.7 padrão é escrita em C, como uma linguagem de programação de único passe.[4] Não há qualquer especificação da linguagem, assim a implementação original é considerada de fato uma referência. Atualmente, há várias implementações alternativas da linguagem, incluindo YARV, JRuby, Rubinius, IronRuby, MacRuby e HotRuby, cada qual com uma abordagem diferente, com IronRuby,[5] JRuby[6] e MacRuby[7] fornecendo compilação Just-In-Time e, JRuby[6] e MacRuby[7] também fornecendo compilação Ahead-Of-Time. A série 1.9 usa YARV, como também a 2.0 (em desenvolvimento), substituindo a lenta Ruby MRI.[8]
Índice[esconder] |
[editar] História
Ruby foi concebida em 24 de fevereiro de 1993 por Yukihiro Matsumoto, que pretendia criar uma nova linguagem que balanceava programação funcional com a programação imperativa.[2] Matsumoto afirmou: "Eu queria uma linguagem de script que fosse mais poderosa do que Perl, e mais orientada a objetos do que Python. É por isso que eu decidi desenvolver minha própria linguagem.".[1]Após o lançamento do Ruby 1.3 em 1999, iniciou-se a primeira lista de discussão em inglês chamada Ruby-Talk,[9] marcando um interesse crescente na linguagem fora do Japão. Em setembro de 2000, o primeiro livro em inglês, Programming Ruby, foi impresso, sendo mais tarde liberado gratuitamente para o público, ajudando no processo de adoção de Ruby por falantes do inglês.[1]
Por volta de 2005, o interesse pela linguagem Ruby subiu em conjunto com o Ruby on Rails, um framework de aplicações web popular escrito em Ruby. Rails é frequentemente creditada como a aplicação que tornou Ruby "famosa" e a associação é tão forte que ambos são muitas vezes confundidos por programadores que são novos a Ruby.[10]
[editar] Etimologia do nome "Ruby"
O nome "Ruby", foi decidido durante uma sessão de bate-papo online entre Matsumoto (Matz) e Keiju Ishitsuka em 24 de fevereiro de 1993, antes que qualquer linha de código tivesse sido escrita para a linguagem.[11] Inicialmente foram propostos dois nomes: "Coral" e "Ruby", sendo esse último nome proposto escolhido mais tarde por Matz em um e-mail para Ishitsuka.[12] Matsumoto explicou mais tarde que o motivo de ter escolhido o nome "Ruby" foi porque essa era a pedra zodiacal de um de seus colegas.[13][editar] Características
Uma série de características foram definidas para atender às propostas do Ruby:- Todas as variáveis são objetos, onde até os "tipos primitivos" (tais como inteiro, real, entre outros) são classes;
- Métodos de geração de código em tempo real, como os "attribute accessors";
- Através do RubyGems, é possível instalar e atualizar bibliotecas com uma linha de comando, de maneira similar ao APT do Debian Linux;
- Code blocks (blocos de código) passados como parâmetros para métodos; permite a criação de closures;
- Mixins, uma forma de emular a herança múltipla;
- Tipagem dinâmica, mas forte. Isso significa que todas as variáveis devem ter um tipo (fazer parte de uma classe), mas a classe pode ser alterada dinamicamente;
[editar] Tipos de dados
Não existem "tipos primitivos" em Ruby; todos os tipos são classes:- Object é a classe mãe de todas as outras classes em Ruby;
- Numeric é uma classe abstrata que representa números;
- Integer é uma classe que representa números inteiros;
- Fixnum representa números inteiros de precisão fixa;
- Bignum representa números inteiros de precisão infinita, dependente apenas da memória disponível.
- Float é uma classe que representa números flutuantes (números reais);
- Integer é uma classe que representa números inteiros;
- String uma cadeia de caracteres. Pode ser delimitado por apóstrofes (') ou aspas ("). Tudo o que há entre apóstrofes é interpretado literalmente, entre aspas o programador deve se utilizar de símbolos para representar caracteres específicos, como em C. Exemplos: 'azul', "a\nb\nc";
- Symbol é semelhante a uma string, mas dois símbolos iguais possuem o mesmo endereço de memória, sendo assim é ótimo para se utilizar como índice numa Hash. Porém, devido à sua natureza, o coletor de lixo do Ruby não os elimina. É definido com um sinal de dois pontos (:), por exemplo, :nome;
- Array são arrays dinâmicos, que podem ser usados para representar matrizes e vetores. É delimitado por colchetes ([]) e cada valor é separado por vírgula. Exemplo: [4, 'azul', :termometro];
- Hash representa um vetor associativo, e, assim como as Arrays, é dinâmica. É delimitada por chaves ({}), e o índice precede o valor com um sinal '=>'. Exemplo: {:controller => 'user', :action => 'index'}. Qualquer objeto pode ser um índice, mas os mais usados são as Strings e os Symbols;
- Regexp representa expressões regulares, delimitadas por //. Funciona de forma semelhante a Perl. Exemplo: /a|ae/.
- Numeric é uma classe abstrata que representa números;
[editar] Declaração de variáveis
Um objeto em Ruby é declarado com uma atribuição comum:var1 = 2 var2 = Classe.new var3 = Classe2.new(parametro)
local = "local" @instancia = 42 @@classe = /f+/ $Pi = 3.1415926
[editar] Exemplos de código
[editar] Programa Olá Mundo
puts "Olá, Mundo!"
[editar] Strings
Há uma variedade de métodos para definir strings em Ruby. As definições a seguir são equivalentes e suportam interpolação:a = "\nIsto é uma string de aspas duplas\n" a = %Q{\nIsto é uma string de aspas duplas\n} a = %{\nIsto é uma string de aspas duplas\n} a = %/\nIsto é uma string de aspas duplas\n/ a = <<BLOCO Isto é uma string de aspas duplas BLOCO
a = 'Isto é uma string de aspas duplas' a = %q{Isto é uma string de aspas duplas}
[editar] Coleções
[editar] Array
a = [1, 'oi', 3.14, 1, 2, [4, 5]] a[2] # 3.14 a.reverse # [[4, 5], 2, 1, 3.14, 'oi', 1] a.flatten.uniq # [1, 'oi', 3.14, 2, 4, 5] a.push(23) # [1, 'oi', 3.14, 1, 2, [4, 5], 23] a << 22 # [1, 'oi', 3.14, 1, 2, [4, 5], 23, 22]
[editar] Hash
hash = {'água' => 'molhada', 'fogo' => 'quente'} puts hash['fogo'] hash.each_pair do |chave, valor| puts "#{chave} é #{valor}" end # Imprime: # água é molhada # fogo é quente hash.delete_if {|chave, valor| chave == 'água'} # Apaga 'água' => 'molhada'
[editar] Blocos e iteradores
Blocos de código (ou code blocks) são trechos de código que são passados como parâmetros para métodos. Blocos são extremamente usados em Ruby.class Paises @paises = ["Argentina", "Brasil", "Paraguai", "Uruguai"] def self.each for pais in @paises yield pais end end end Paises.each do |pais| puts "Olá, #{pais}!" end
array = [1, 'oi', 3.14] array.each do |item| puts item end # => 1 # => 'oi' # => 3.14 # Equivalente, usando chaves: array.each { |item| puts item } # => 1 # => 'oi' # => 3.14
array = [1, 'oi', 3.14] for item in array puts item end # => 1 # => 'oi' # => 3.14
File.open('arquivo.txt', 'w') do |arquivo| for i in (1..3) do arquivo.puts 'Olá, Mundo!' end end # O arquivo é fechado automaticamente aqui File.readlines('arquivo.txt').each do |linha| puts linha end # => Olá, Mundo! # => Olá, Mundo! # => Olá, Mundo!
proc {|arg| print arg} Proc.new {|arg| print arg} lambda {|arg| print arg}
[editar] Classes
O código a seguir define uma classe chamada Pessoa. Além de initialize, o construtor para criar novos objetos, essa classe tem dois métodos: um que sobre-escreve o operador de comparação>
(maior), e sobre-escreve o método to_s
(assim o comando puts
pode formatar a saída). Aqui attr_reader
é um exemplo de metaprogramação em Ruby: attr_reader
define o método getter, attr_writer
define o método setter, e attr_accessor
define ambos. Em Ruby, todos os atributos são privados e todos os métodos públicos, por padrão. Ruby permite definir opcionalmente o tipo de acesso usando três palavras-chave: public (público), private (privado) e protected (protegido). Ruby não suporta sobrecarga de métodos, mas suporta argumentos padrão, que podem ser utilizados para o mesmo fim. Também, o último comando em um método é considerado o seu valor de retorno, permitindo a omissão de um explícito return
.class Pessoa attr_reader :nome, :idade def initialize(nome = "Desconhecido", idade) @nome, @idade = nome, idade end def >(pessoa) if self.idade > pessoa.idade return true else return false end end def to_s # Método usado pelo método puts() para formatar a saída "#@nome (#@idade anos)" end end pessoas = [ Pessoa.new("Ricardo", 19), Pessoa.new(idade = 25) ] puts pessoas[0] puts pessoas[1] puts pessoas[0] > pessoas[1] # O mesmo que: pessoas[0].>(pessoas[1])
Ricardo (19 anos) Desconhecido (25 anos) false
[editar] Classes abertas
Em Ruby, as classes nunca são fechadas: você pode sempre adicionar novos métodos a uma classe. Isso se aplica tanto para classes criadas por você, quanto para as classes padrão. Um exemplo simples de adição de um novo método a classe padrão String:class String def iniciais ini = String.new for nome in self.split do ini += nome[0] end return ini end end puts "Ricardo Silva Veloso".iniciais # Imprime RSV
[editar] Herança
Ruby não suporta herança múltipla. Ao invés disso, Ruby usa Mixins para emular herança múltipla:class Pessoa < Mamifero # Herança de Mamifero include Humano # Emulando herança múltipla end
[editar] Modules
Além das classes normais, Ruby possui os "Modules", que são classes de classes, permitindo espaço de nomes:module Humano class Classe1 def info "#{self.class} (\##{self.object_id}): #{self.to_s}" end end end
[editar] Tratamento de exceções
Como a maioria das linguagens modernas, Ruby também possui suporte para tratamento de exceção. As palavras-chave para isto são "begin", "rescue" e "ensure". "Begin" inicia um trecho que pode cair em alguma exceção (opcional), "Rescue" determina o comportamento em caso de uma exceção específica ou não e, "Ensure" é o código que será executado independente de ter havido exceção ou não.begin # Faça algo rescue # Trata alguma exceção else # Faça isto se nehuma exceção for lançada ensure # Faça isto se alguma ou nehuma exceção for lançada end
[editar] Ruby para administradores de sistemas
A maioria dos administradores de sistemas Unix utilizam Perl ou Shell Script como ferramenta para resolver os problemas. Mas é possível usar Ruby e Python para os mesmos fins. Abaixo, a idéia é fazer um pequeno script que verifica se o serviço da porta 80 (Web) de alguns servidores estavam ativos.require 'net/http' File.open("hosts.txt", "r").each_line do | host | conexao = Net::HTTP.new(host.chomp, 80) resposta, conteudo = conexao.get("/", nil) if resposta.code.to_i > 400 # aqui vai a rotina pra enviar email... end end
[editar] Repositórios e bibliotecas
Ruby possui repositórios de bibliotecas disponíveis em sites como Ruby Forge e Ruby Application Archive (RAA). Existe, ainda, uma ferramenta de instalação de bibliotecas, chamada RubyGems, semelhante aos gerenciadores de pacotes do Linux, como o APT. O projeto mais famoso desenvolvido em Ruby é o meta-framework Ruby on Rails.Recentemente, muitas bibliotecas novas e existentes foram hospedadas no GitHub, que é focado em Git e tinha suporte nativo ao empacotamento do RubyGems.[14]
Referências
- ↑ a b c An Interview with the Creator of Ruby (em inglês). Página visitada em 22 de maio de 2010.
- ↑ a b About Ruby (em inglês). ruby-lang.org. Página visitada em 22 de maio de 2010.
- ↑ Tiobe Index (em inglês). tiobe.com. Página visitada em 5 de novembro de 2010.
- ↑ Why Rubinius Matters to Ruby's Future (em inglês). Página visitada em 25 de junho de 2010.
- ↑ IronRuby Unleashed: An Interview with Shay Friedman (em inglês). Página visitada em 25 de junho de 2010.
- ↑ a b JRuby Compiler (em inglês). Página visitada em 25 de junho de 2010.
- ↑ a b The MacRuby Blog (em inglês). Página visitada em 25 de junho de 2010.
- ↑ Yarv (em inglês). Página visitada em 25 de junho de 2010.
- ↑ Mailing Lists (em inglês). ruby-lang.org. Página visitada em 6 de julho de 2010.
- ↑ Web Development: Ruby on Rails (em inglês). Página visitada em 3 de junho de 2010.
- ↑ History of Ruby (em inglês). Página visitada em 22 de maio de 2010.
- ↑ "The decisive moment of the language name Ruby" - Email from Hiroshi Sugihara to ruby-talk (em inglês). Página visitada em 22 de maio de 2010.
- ↑ "Re: the name of Ruby?" - Email from Yukihiro Matsumoto to ruby-talk (em inglês). Página visitada em 22 de maio de 2010.
- ↑ Gem Building is Defunct (em inglês). Página visitada em 15 de julho de 2010.
[editar] Ver também
[editar] Ligações externas
- Página oficial (em japonês, em inglês e em português)
- RAA - Ruby Application Archive (em inglês)
- The Book Of Ruby (em inglês)
- O Guia (comovente) de Ruby do Why (em português)
- Aprenda a Programar (em português)
- Ruby Brasil (em português)
- Ruby PT (em português)
Nenhum comentário:
Postar um comentário