Objetos

Sendo Ruby uma linguagem dinâmica, variáveis não têm tipo, e são apenas referências a objetos*. Uma atribuição não copia o objeto. Isso quer dizer que ao executar b = a, estamos efetivamente fazendo com que a variável b se refira ao mesmo objeto que a. Por exemplo:

class Teste       # Define classe Teste
  def set(v)      # Define método 'set' com argumento v
    @v = v        # Inicializa o atributo @v
  end
  def get
    @v
  end
end

a = Teste.new     # a se refere a um novo objeto Teste
b = a             # b se refere ao mesmo objeto que a
a.set("oi")

a.get             # >> oi
b.get             # >> oi

Pode ser feita a cópia de um objeto, usando-se o método clone (ou dup).

class Teste
  def set(v)
    @v = v
  end
  def get
    @v
  end
end

a = Teste.new     # a se refere a um novo objeto Teste
b = a.clone       # b se refere a uma cópia de a, ou seja, outro objeto Teste
a.set("oi")

a.get             # >> oi
b.get             # >> nil

Em Ruby, classes também são objetos (da classe Class), e como tais, respondem a métodos e têm todas as demais características de objetos normais.

Nota: Alguns "objetos", como os valores false, true, nil, e números da classe Fixnum (entre 2**30-1 e -2**30) são valores imediatos, e não propriamente objetos. Portanto, não é possível definir métodos singleton para eles, por exemplo. Quando um valor inteiro ultrapassa os limites de Fixnum, é automaticamente convertido em um Bignum, que é um objeto normal.

topo da página

<< Página Anterior | índice | Próxima Página >>
Apostilas de Ruby e RGSS

nossos tutoriais

navegue

livros recomendados