Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada...
-
Upload
maria-cruz -
Category
Documents
-
view
218 -
download
0
Transcript of Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada...
Yukihiro Matsumoto(“Matz”), 1993
Perl Smalltalk Eiffel Ada Lisp
“Natural, not simple”“More powerful than Perl and more OO than Python”
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
• Métodos
• Variáveis locais
• Variáveis de instância
MinhaClasse
meu_metodo_legal
minha_variavel
@var_de_instancia
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
Variáveis
• Podem ser– locais– globais– de instância– ou estáticas
• E podem ser constantes
localVar = 2$globalVar = “3”@instaceVar = 4.3@@staticVar = [2,3]
Pi = 3.1416Name = “Ruby”
String Number Symbol Array HashString
• Aspas simples ou duplas
Permitem interpolação
#{expressão}: def metodo_qualquer(nome) puts “O nome é: #{nome}”end
String Number Symbol Array HashString
\”\\\a bell/alert\b backspace\r carriage return
\n\s\t
Caracteres de escape
String Number Symbol Array HashString
concat, <<, +<=>, ==, eql?include?length, sizeto_f, to_i float/int
to_s de outros tipos
Alguns métodos
String Number Symbol Array HashString
>> puts “hello,\nworld”hello,World
>>%w(a b c) (separa nos espaços em branco)
=> [“a”, “b”, “c”]
• Fixnum– Inteiros entre -230 and 230-1
• Bignum– Fora do intervalo de Fixnum, “infinitos”. Limite
aproximado: 2218
• Float• Conversão automática
String Number Symbol Array HashNumber
• Como tudo é objeto… operadores são açucares sintáticos!
String Number Symbol Array Hash
4 + 7 4.+(7)>> var_a = 300>> var_a.class>> var_a += 40832000000>> var_a.class
=> 300=> Fixnum=> 40832000300 => Bignum
• Representação interna de um nome• Atômico, imutável e único– Todas as referências para um único objeto
String Number Symbol Array HashSymbol
>> :my_value.equal?(:my_value)=> true
>> “my_value”.equal?(“my_value”)=> false
• 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}
String Number Symbol Array HashArray Hash
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
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.
Variáveis de Instância
>ruby rocketShip.rbrocketShip.rb:13: undefined method `destination' for #<RocketShip:0x27f5510 @destination="Netptune"> (NoMethodError)>Exit code: 1
Herança
• Suporte à herança simples• Todos os atributos e métodos não-privados de
super-classe são herdados pela sub-classe.
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
pessoa.rb:19: undefined method `<' for #<Pessoa:0x27f4688 @nome="Paty",@idade=21> (NoMethodError)
/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