Ruby
André Braga
Patrícia Lustosa
Yukihiro Matsumoto
(“Matz”), 1993
Perl
Smalltalk
Eiffel
Ada
Lisp
Simplicidade e Produtividade
 Para pessoas
– Sintaxe elegante e fácil
– Fácil de ler e escrever
– Poderosa
 Interpretada
 Tipagem dinâmica
 OO : TUDO é objeto
– Sem tipos primitivos.
Convenções
• Classes e Módulos
MinhaClasse
• Métodos
meu_metodo_legal
• Variáveis locais
minha_variavel
• Variáveis de instância @var_de_instancia
Programando
• IRB (Interactive Ruby)
• SciTE (editor)
– F5 para executar
1)
Tudo é objeto
Orientação a Objetos
• Como em Smalltalk, tudo é objeto
• C++ e Java: híbridas
– Objetos e tipos primitivos
Mais eficiente para algumas
aplicações, mas…
OO puro é mais consistente
e fácil de usar
Orientação a Objetos
•
•
•
•
Tipos primitivos: -1.abs
Nil: nil.methods
Classes: Song.new
Blocos: podem até ser passados como
parâmetros
2)
Variáveis
Variáveis
• Podem ser
– locais
– globais
– de instância
– ou estáticas
localVar = 2
$globalVar = “3”
@instaceVar = 4.3
@@staticVar = [2,3]
• E podem ser constantes
Pi = 3.1416
Name = “Ruby”
Escopo
Constantes
3)
Tipos
String Number Symbol Array Hash
• Aspas simples ou duplas
Permitem interpolação
#{expressão}: def metodo_qualquer(nome)
puts “O nome é: #{nome}”
end
String Number Symbol Array Hash
Caracteres de escape
\”
\\
\a bell/alert
\b backspace
\r carriage return
\n
\s
\t
String Number Symbol Array Hash
Alguns métodos
concat, <<, +
<=>, ==, eql?
include?
length, size
to_f, to_i float/int
to_s de outros tipos
String Number Symbol Array Hash
>> puts “hello,\nworld”
hello,
World
>>%w(a b c) (separa nos espaços em branco)
=> [“a”, “b”, “c”]
String Number Symbol Array Hash
• Fixnum
– Inteiros entre -230 and 230-1
• Bignum
– Fora do intervalo de Fixnum, “infinitos”. Limite
18
2
aproximado: 2
• Float
• Conversão automática
String Number Symbol Array Hash
• Como tudo é objeto… operadores são
açucares sintáticos!
4 + 7  4.+(7)
>>
>>
>>
>>
var_a = 300
var_a.class
var_a += 40832000000
var_a.class
=>
=>
=>
=>
300
Fixnum
40832000300
Bignum
String Number Symbol Array Hash
• Representação interna de um nome
• Atômico, imutável e único
– Todas as referências para um único objeto
>> :my_value.equal?(:my_value)
=> true
>> “my_value”.equal?(“my_value”)
=> false
String Number Symbol Array Hash
• Economia de memória!
• Fáceis de usar, fica mais bonito…
• Uso:
– Hash keys (:name=> ‘Brian’, :hobby=> ‘golf’)
– Parâmetros (:name, :title)
– Nomes de métodos (:post_comment)
String Number Symbol Array Hash
• Arrays
– [“a”, “b”, 3, 5.6]
• Hash
– Chaves apotando para valores
– Cada chave é única
– Hash.new ou meu_hash={“a” => 1,
“b”=>2}
4)
Palavras
Reservadas
Reserved Keywords
=begin =end alias and begin BEGIN
break
case class def defined? do
else elsif END end ensure false
for if in module next nil
not or redo rescue retry return
self super then true undef unless
until when while yield
5)
Estruturas de
Controle
Condicionais
Condicionais
Loop
Loop
Loop
6)
Classes
Definindo Classes
Instanciação
• Uma instância é criada a partir de uma classe
usando o método new (de Class)
anObject = MyClass.new(parameters)
• Essa função constrói um objeto na memória e
passa a execução para a função
initialize da classe, se houver.
Exemplo
Variáveis de Instância
>ruby rocketShip.rb
rocketShip.rb:13: undefined method `destination' for
#<RocketShip:0x27f5510 @destination="Netptune">
(NoMethodError)
>Exit code: 1
Writers and Readers
Accessors
Herança
• Suporte à herança simples
• Todos os atributos e métodos não-privados de
super-classe são herdados pela sub-classe.
Herança
Módulos
• Módulos são coleções de métodos
• Classes podem ´mixin´ um módulo e receber
todos os métodos do módulo diretamente
• Simulam herança múltipla
Comparable
<
Módulo
>
<=
>=
Classe
<=>
==
between
Comparable
pessoa.rb:19: undefined method `<' for
#<Pessoa:0x27f4688 @nome="Paty",
@idade=21> (NoMethodError)
Incluindo Comparable
7)
Expressões
Regulares
/regex/
• Casamento de padrões
Abreviação
Significado
Oposto
\d
[0-9]
\D
\s
Espaço em branco
\S
\w
[A-Za-z0-9_]
\W
.
Qualquer caracter
/(c|C)omp\w+.*s/
retorna a posição
retorna o que casou
Download

RubyCompiladores