Programación en Ruby/Recolección de basura

De Wikilibros, la colección de libros de texto de contenido libre.

La expresión p = nil significa que no hace referencia a nada. Si ahora escribimos p1 = nil, entonces el objeto Perro es abandonado y es elegible para la recolección de basura. Garbage Collection (GC). En Ruby, el objeto llamado heap destina un mínimo de 8MB. El recolector de basura de Ruby es del tipo llamado mark-and-sweep. Ruby usa un mecanismo conservador del tipo mark and sweep. No hay garantía de que un objeto sea recolectado antes de que el programa termine.

Métodos de clase

Un método de clase es enviado a la clase misma, no a una instancia de la clase. Algunas operaciones que pertenecen a la clase no pueden ser llevadas a cabo por instancias individuales de esa clase. new es un ejemplo excelente.


Llamamos Perro.new porque, hasta que hayamos creado una instancia de clase Perro no podemos enviarle mensajes! Además, el trabajo de crear un nuevo objeto lógicamente pertenece a la clase. No tiene sentido que una instancia de la clase Perro cree a su vez instancias de su misma clase. Sin embargo, si tiene sentido que el proceso de creación de instancias se centralizado como una actividad de la clase Perro. Es de vital importancia entender que Dig.new es un método que podemos accessar a través de la clase pero ne de las instancias de la clase.

Los objetos individuales "Perro" (instancias de la clase Perro) no tienen acceso a este método. Una clase tiene sus propios métodos, su propio estado y su propia identidad y no los comparte con sus instancias.

La siguiente tabla muestra un ejemplo (tomado del libro Ruby for Rails) de la notación que se utiliza:

Notación Se refiere a Boleto#precio El método de instancia precio de la clase Boleto Boleto.mas_caro El método de clase mas_caro de la clase Boleto Boleto::mas_caro Otra manera de referirse al método de clase mas_caro

Cuando escribimos acerca de Ruby, el símbolo de número(#) es utilizado algunas veces para indicar en método de instancia -por ejemplo, decimos File.chmod para denotar el método de clase chmod de la clase File y File#chmod para referirnos al método de instancia que tiene el mismo nombre. Esta notación no es parte dela sintaxis de Ruby, es sólo parte del folklore.