Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada...

46
Ruby André Braga Patrícia Lustosa

Transcript of Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada...

Ruby

André Braga

Patrícia Lustosa

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

Programando• IRB (Interactive Ruby)• SciTE (editor) – F5 para executar

Tudo é objeto

1)

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áveis2)

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”

Escopo

Constantes

Tipos3)

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

Palavras Reservada

s

4)

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

Estruturas de Controle

5)

Condicionais

Condicionais

Loop

Loop

Loop

Classes

6)

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.rbrocketShip.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

Classe < = >

<

>

>=

between

Módulo

<=

==

Comparable

pessoa.rb:19: undefined method `<' for #<Pessoa:0x27f4688 @nome="Paty",@idade=21> (NoMethodError)

Incluindo Comparable

Expressões

Regulares

7)

/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