Instanciação e o método Initialize

01

de 02

Instanciação e o método Initialize

Aprendendo Ruby on Rails: brincando com o irb
brnzwngs / Flikr / CC BY 2.0

Quando você define uma classe no Ruby, o Ruby atribui um novo objeto de classe ao constante do nome da classe. Por exemplo, se você dissesse classe Pessoa; fim, isso é aproximadamente equivalente a Pessoa = Classe.novo. Este objeto de classe é do tipo Classe, e mantém vários métodos úteis para criar instâncias de cópias dessas instâncias.

02

de 02

Fazendo Instâncias

Para criar uma nova instância de uma classe, chame essa classe de Novo método. Por padrão, isso alocará a memória necessária para a classe e retornará uma referência ao novo objeto. Portanto, se você criar uma nova instância do Pessoa classe, você chamaria Person.new.

Embora a princípio isso pareça um pouco atrasado, não há Novo palavra-chave em Ruby ou qualquer sintaxe especial. Novos objetos são criados através de um método normal que, dito e feito, faz coisas relativamente simples.

Inicializando instâncias

Um objeto em branco não é muito emocionante. Para começar a usar seu objeto, ele deve primeiro ser inicializado (supondo que ele tenha algum

instagram viewer
variáveis ​​de instância que precisa ser inicializado). Isso é feito através do inicializar método. Ruby passará todos os argumentos para os quais você passar SomeClass.new para inicializar no novo objeto. Você pode usar atribuições e métodos normais de variável para inicializar o estado do objeto. Neste exemplo, um Pessoa classe é apresentada cuja inicializar O método pega um argumento de nome e idade e os atribui a variáveis ​​de instância.

classe Person def initialize (nome, idade) @name, @age = name, end de fim de idade bob = Person.new ('Bob', 34)

Você também pode usar esta oportunidade para adquirir todos os recursos que precisar. Rede aberta tomadas, abra arquivos, leia todos os dados necessários, etc. A única ressalva é que as pessoas geralmente não esperam inicializar métodos para falhar. Certifique-se de documentar qualquer falha possível inicializar métodos completamente.

Destruindo objetos

Em geral, você não destrói objetos em Ruby. Se você vem de C ++ ou de outro idioma sem um coletor de lixo, isso pode parecer estranho. Mas no Ruby (e na maioria das outras linguagens de coleta de lixo), você não destrói objetos, simplesmente para de se referir a ele. No próximo ciclo de coleta de lixo, qualquer objeto sem nada referente a ele será destruído automaticamente. Existem alguns bugs com referências circulares, mas em geral isso funciona perfeitamente e você nem precisa de um "destruidor".

Se você está pensando em recursos, não se preocupe. Quando o objeto que contém o recurso é destruído, o recurso será liberado. Os arquivos abertos e as conexões de rede serão fechados, a memória desalocada etc. Somente se você alocar algum recurso em uma extensão C, precisará realmente se preocupar em desalocar recursos. Embora não haja garantia de quando o coletor de lixo será executado. Para desalocar recursos em um oportuno Dessa maneira, tente liberá-los manualmente.

Fazendo cópias de objetos

Ruby é passado por referência. Se você passar uma referência a um objeto para um método, e esse método chama um método que modifica o estado desse objeto, consequências indesejadas podem ocorrer. Além disso, os métodos podem salvar a referência ao objeto a ser modificado muito mais tarde, causando um efeito atrasado para o bug. Para evitar isso, Ruby fornece alguns métodos para duplicar objetos.

Para duplicar qualquer objeto, basta chamar o some_object.dup método. Um novo objeto será alocado e todas as variáveis ​​de instância do objeto serão copiadas. No entanto, copiar variáveis ​​de instância é o que isso deveria evitar: isso é chamado de "cópia superficial". E se você mantinha um arquivo em uma variável de instância, agora os dois objetos duplicados se referiam à mesma Arquivo.

Lembre-se de que as cópias são rasas antes de usar o dup método. Veja o artigo Fazendo cópias profundas em Ruby Para maiores informações.

instagram story viewer