Anda di halaman 1dari 31

Linguagem de Programação - Ruby

Paradigma Orientação a objeto


Surgido em 1995
Última versão 1.9.1 (12 de maio de 2009)
Criado por Yukihiro Matsumoto
Estilo de dinâmica, forte
tipagem:
Dialetos: JRuby, Rubinius, Ruby MRI, YARV
Influenciada por Ada, CLU, Dylan, Eiffel, Lisp, Perl,Python, Schem
e, Smalltalk

Influenciou Fantom, Groovy


Página oficial www.Ruby-Lang.org

Linguagem de Programação - Ruby


• Ruby é uma linguagem orientada a objetos
adequada tanto para a escrita de scripts do
dia a dia como de aplicativos de larga escala

• Dezenas de centenas de aplicações Rails já


estão rodando em todo o mundo. Pessoas
estão utilizando o Rails em diversas situações,
desde pequena operações pequenas até
gigantes corporações.

Linguagem de Programação - Ruby


•Scribd: Publique documentos de diversos formatos.
•Twitter: Fique conectado com seus amigos.
•Basecamp: Gerenciamento de projetos.
•Campfire: Salas de reunião para negócios.
•BlogBlogs: Indexação, ranking e busca de blogs brasileiros.
•Mapia: Guia de Bares, Restaurantes, Hotéis.
•Brasigo: Espaço comunitário para criar, compartilhar e
descobrir conteúdo.
•Ikwa: Canal de conteúdo, serviços e networking para
crescimento profissional.

Linguagem de Programação - Ruby


•A primeira versão alpha ficou pronta em
dezembro de 1994. Até 1996, Matsumoto (Matz)
trabalhou sozinho, quando começou a se formar
uma comunidade ao redor da linguagem. A partir
daí, apesar de ainda fazer a maior parte do
desenvolvimento sozinho, Matz passou a receber
fixes e patches da comunidade.

Linguagem de Programação - Ruby


•Em 2004, David Heinemeier Hansson e
colaboradores criaram a “killer application” que
está alavancando a linguagem para uma
linguagem de primeiro nível: o RubyOnRails.
Framework de desenvolvimento web (gratuito e
de código aberto).

Linguagem de Programação - Ruby


• Ponto e vírgula como terminadores não são
necessários.
• Comentários são linhas começadas por #.
• Os métodos são definidos pela palavra reservada
def, seguido pelo nome do método e seus
parâmetros entre parênteses, Exemplo:

def sayHello(name)
result = "Hello, " + name
return result
end

Linguagem de Programação - Ruby


• Podemos chamar o método sayHello de diversas
formas, como mostrado abaixo:

puts sayHello "World"


puts sayHello("World")
puts(sayHello "World")
puts(sayHello("World"))

Não é necessário declarar variáveis e os métodos não


podem ser declarados fora de classes.

Linguagem de Programação - Ruby


Variáveis Variáveis Instância Classes Constante
locais Globais s
nome $debug @cidadao @@pc Pi

x_axis $soma @prisma @@objeto Tamanho

_altura $i @objeto @@linha Lines

_idade $arq @carro @@estrada E

Linguagem de Programação - Ruby


• Podemos criar e inicializar arrays declarando
um conjunto de elementos entre chaves, por
exemplo:
# array com três elementos
a = [ 1, ’cat’, 3.14 ]
# acessa o primeiro elemento
a[0] » 1
# armazena nil na segunda posição do array
a[2] = nil
# o array após essas operações
a » [1, "cat", nil]

Linguagem de Programação - Ruby


• #Array de palavras
• a = %w{ ant bee cat dog elk }
• a[0] » "ant"
• a[3] » "dog"

Linguagem de Programação - Ruby


• O intérprete e a bibliotecas estão licenciadas com as licenças
livres e de código aberto GPL e Licença Ruby. Apesar da
linguagem não possuir nenhuma classe para implementação
de GUI nativa, existem várias bibliotecas que podem ser
utilizadas junto com o Ruby. Por exemplo: Tk, OpenGL e GTK,
entre outros.

• SciTE - Foi construído originalmente como uma demonstração


para o Scintilla, e dispõe de diversas facilidades para
desenvolvedores, como marcação de sintaxe, integração com
compiladores. É programável internamente usando a
linguagem Lua.
Linguagem de Programação - Ruby
• As variáveis são: global, classe, instância e local.
• Ruby mantém todas suas variáveis de instância
privadas dentro das classes e só a expõe através de
métodos de acesso (attr_writer, attr_reader, etc).
• Não possuem tipo, assim como em Smalltalk, BASIC
ou Python. Isto significa que conforme as variáveis
são utilizadas no programa elas vão tendo o seu tipo
atribuído (atribuição de tipos dinâmica).

Linguagem de Programação - Ruby


Atribuição comum
var1 = 2
var2 = Classe.new
var3 = Classe2.new(parametro)
local = "local“
@instancia = 42
@@classe = /f+/
$Pi = 3.14

Linguagem de Programação - Ruby


• As variáveis não precisam ser declaradas antes
de serem utilizadas. Conforme o nome da
variável o interpretador sabe qual o escopo da
variável utilizada (heap-dinâmicas implícitas).

Linguagem de Programação - Ruby


Não existem "tipos primitivos" em Ruby. Todos os dados são objetos.
Porém, algumas classes são básicas e vêm embutidas na linguagem.

• Fixnum: representa o equivalente a integer ou int em outras


linguagens. É um número sem ponto flutuante. Exemplos: 1, 2, 3, 4.

• Bignum: um Fixnum com suporte a valores maiores. É mais lenta,


porém trata números que o Fixnum não é capaz de tratar.

• Float: equivale ao real e float. É um ponto flutuante. É necessário


haver um ponto para se classificar como Float. Exemplos: 2.5, 2.0,
4.2.

Linguagem de Programação - Ruby


• Numeric: é a classe pai de Fixnum e Float. Uma classe abstrata.

• 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. É definido com um sinal de
dois pontos (:). Exemplo :nome.

Linguagem de Programação - Ruby


• Regexp: uma Expressão Regular, delimitada por //. Funciona de
forma semelhante a Perl. Exemplo: /a|ae/.

• Arrays: representa uma matriz. Ao contrário da maioria das outras


linguagens, arrays em Ruby são sempre dinâmicas. É delimitado por
colchetes ([]) e cada valor é separado por vírgula. Exemplo: [4,
'azul', :termometro].

• Hash: representa um dicionário de dados, 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.

Linguagem de Programação - Ruby


• A atribuição de valores às variáveis é feita através de
referências a objetos (ao atribuir um valor a um
objeto, este valor não precisa ser copiado e
instanciado novamente). Um valor também é um
objeto na linguagem Ruby.

• O Ruby possui uma funcionalidade conhecida


como attribute accessors, que geram getters e setter
em tempo de execução.

Linguagem de Programação - Ruby


class Pessoa end
# Não utilizando Attribute Accessor def cpf
def nome @cpf
@nome end
end def cpf=(valor)
def nome=(valor) @cpf = valor
@nome = valor end
end end
def nascimento # Utilizando Attribute Accessor
@nascimento class Pessoa
end attr_accessor :nome, :nascimento, :cpf
def nascimento=(valor) end
@nascimento = valor

Linguagem de Programação - Ruby


• A linguagem Ruby possui todas as estruturas de
controle padrões das linguagens populares hoje em
dia, como ifs e whiles. A única diferença é que não
usa chaves e sim a palavra reservada end para acabar
uma estrutura.
Exemplo:
while weight < 100 and numPallets <= 30
pallet = nextPallet()
weight += pallet.weight
numPallets += 1
end

Linguagem de Programação - Ruby


Para facilitar a legibilidade do código existem construções que podem ser
feitas de maneiras um pouco diferentes.
#uma construção padrão
if radiation > 3000
puts "Danger, Will Robinson"
end
#agora reescrevendo a construção
puts "Danger, Will Robinson" if radiation > 3000
#da forma padrão
while square < 1000
square = square*square
end
#modificando a construção
square = square*square while square < 1000

Linguagem de Programação - Ruby


• Ruby não possui tipos primitivos, mas sim todos tipos são classes, assim
como todas variáveis são objetos.
• A maioria dos operadores binários e unários são, na realidade, métodos.
Ou seja, podem ser alterados da mesma forma que os operadores em C++.
class MeuNumero < Fixnum
def +(numero)
42
end
end
numero = MeuNumero.new(1)
# Repare como um operador de soma é um método em ruby, ao contrário de
outras linguagens
puts numero + 2 # 1+2 = 42 ??? Sim, sobrescrevemos o método de soma para
retornar 42 sempre.

Linguagem de Programação - Ruby


Permite que referências de tipos de classes mais abstratas
representem o comportamento das classes concretas que
referenciam.

Sobrecarga ( Ad-Hoc ): Permite a existência de vários métodos


de mesmo nome, porém com assinaturas levemente diferentes,
ou seja, variando no número e tipo de argumentos e no valor de
retorno.

Coerção ( Ad-Hoc ): Permite que um argumento seja convertido


para o tipo esperado por uma função, evitando assim um erro de
tipo. É uma operação semântica que reduz o tamanho do código

Linguagem de Programação - Ruby


Sobrecarga: Coerção:
# Definição das funções: a = 57
def minhafuncao (a) puts a.class #Imprime FixNum
puts “apenas um parametro” a = a + 300000000000000
end puts a.class #Imprime BigNum
def minhafuncao (a,b) a = a + 1.3
puts “2 parametros”
puts a.class #Imprime Float
end
# Vai imprimir na tela a sentença: “2
parametros”
minhafuncao 2,3
# Vai imprimir na tela: Erro! Falta um
argumento
minhafuncao “Olá”

Linguagem de Programação - Ruby


Trechos de código que são passados como parâmetros para métodos. São
extremamente usados em Ruby, sendo um dos responsáveis pela
manutenção da simplicidade nos códigos. Blocos são limitados por chaves {}
ou por do end. Em geral, usam-se chaves quando o bloco possui apenas uma
linha, e do end quando temos mais de uma.

IO.readlines("hosts.txt").each do | linha |
puts linha.chomp
end
# Esta linha faz o mesmo:
IO.readlines("hosts.txt").each { | linha | puts linha.chomp }

Linguagem de Programação - Ruby


•Concorrência: pode-se executar tarefas simultâneas através de múltiplas threads
ou através de múltiplos processos. Uma classe threads possui todas as
construções para trabalharmos com aplicações multithread, sem a necessidade de
nenhuma biblioteca externa, como em C por exemplo. A linguagem implementa
threads totalmente em nível de usuário, o que a torna independente de sistema
operacional.

•Tratamento de exceções: Numa maneira você consegue capturar erros mas é


obrigado a abandonar a aplicação. A outra maneira funciona através dos
comandos catch/throw, você pode tratar exceções em blocos. Permite que o
programador "simule" uma exceção, através das chamadas traps. As palavras-
chave para isto são "begin", "rescue" e "ensure“. O programador é livre para
determinar se quer ter o controle sobre as exceções ou não. Além destas palavras-
chave, temos também o "retry", que re-executa o trecho a partir do "begin“.

->"begin" inicia um trecho que pode cair em alguma exceção, "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.

Linguagem de Programação - Ruby


@esmtp = true @esmtp = false
begin retry
# First try an extended login. If it fails else
because the raise
# server doesn't support it, fall back to end
a normal login end
if @esmtp then
@command.ehlo(helodom)
else
@command.helo(helodom)
end Código da biblioteca "net/smtp", escrito
rescue ProtocolError por Minero Aoki e citado no
if @esmtp then livro Pickaxe (Programming Ruby: The
Pragmatic Programmer's Guide)

Linguagem de Programação - Ruby


Vantagens:
• Fácil de aprender;
• Maior facilidade de implementação e execução em relação ao Java e ao C#
• É 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.
• Altamente portável: é desenvolvido principalmente em
ambiente GNU/Linux, mas trabalha em muitos tipos de ambientes UNIX,
Mac OS X, Windows, BeOS, OS/2 etc.
• O Ruby não necessita de declarações de variáveis.

Desvantagens:
• Ao utilizarmos threads em nível de usuário estamos compartilhando o
escalonamento do processo ao contrario de threads de sistema que
compartilham o processador com os outros processos. Usar threads em
ruby nunca faz o programa executar mais rápido e sim mais lento por
causa do custo da troca de contexto. Mas permite execução concorrente
compartilhando um mesmo espaço de memória.
• Os programas mais lentos do que em C/C++
Linguagem de Programação - Ruby
O Ruby é simples na aparência, mas
muito complexo no interior, tal
como o corpo humano.

Yukihiro “matz” Matsumoto

Linguagem de Programação - Ruby


http://rubyonbr.org/articles/2006/08/24/o-que
ruby/

http://www.nomedojogo.com/category/traducoes/

http://www.ruby-lang.org/pt/

http://forum.rubyonbr.org/forums/1/topics/1329
Linguagem de Programação - Ruby

Anda mungkin juga menyukai