Los métodos attr_* de Ruby

3 minuto(s)

En Programación Orientada a Objetos el concepto de Member Access Control es importante, ya que permite controlar el acceso a variables encapsuladas, en muchos lenguajes de programación el concepto de Member Access Control se implementa utilizando getters y setters para cada miembro y en Ruby los métodos attr_* son los que están a cargo de Member Access Control y en este Post hablaremos sobre ello.

Antes de continuar con este Post, te invito a escuchar el Podcast: “Donde buscar ayuda sobre Programación”:

Spotify:

Sound Cloud:

Bien ahora continuemos con el Post: Atributos en Ruby.

Vamos a mencionar el nombre del método attr_* con una descripción y código de ejemplo para entenderlo mejor.

attr

Este método crea una variable de instancia y un método getter para cada nombre de atributo que es pasado como argumento.

Un argumento puede ser un Symbol o un String que se convertirá a Symbol.


En el código anterior, el módulo Attr incluye 2 métodos de instancia que permiten leer el valor de attr1 y attr2.

attr_reader

El método attr_reader es similar al anterior, es decir al método attr

attr_writer

Este método crea una variable de instancia y un método que es establecido en cada nombre de atributo que sea pasado como argumento.

Un argumento puede ser un Symbol o un String que se convertirá a Symbol


En el código anterior, el módulo Attr incluye 2 métodos de instancia que permiten modificar el valor de attr1 y attr2.

attr_accesor

Este método crea un variable de instancia, un método getter y setter para cada nombre de atributo que es pasado como argumento.

Un argumento puede ser un Symbol o un String que se convertirá a Symbol.


En el código anterior, el módulo Attr incluye 4 métodos de instancia que permiten leer y modificar el valor de attr1 y attr2.

Mecanismo Lazy initialization

En los métodos anteriores, mencione que los métodos attr_* crean variables de instancia.

Las variables de instancia creadas por los métodos attr_* usan el mecanismo lazy initialization.

Esto significa que las variables de instancia solo se inicializan cuando se invoca el método setter o cuando la variable de instancia se establece explícitamente dentro de un método de instancia.


En el código anterior la variable de instancia @title se crea explícitamente en el método paginaWeb#initialize

Por lo tanto, la variable de instancia @title esta disponible en el array devuelto por la primera llamada a instance_variables.

Observa que la variable de instancia @link aún no se ha creado, a pesar de la llamada al método attr_accessor. Esta variable de instancia @link solo se crea después de la llamada al método paginaWeb#link.

Conclusión

Al usar lo métodos attr_*, una variable de instancia asociada a cada nombre de argumento solo se creará cuando le establezcamos un valor (al usar el método setter o al asignarle un valor explícitamente).

Nota(s)

  • No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.

Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.