Puertas de alcance en Ruby: Parte I

Mehdi Farsi

Sigue

Sep 2, 2019 – 3 min read

En este artículo, vamos a explorar los siguientes temas:

  • Ámbito de los métodos
  • Ámbito de las clases

Antes de empezar

Estoy encantado de compartir con vosotros nuestro último proyecto: Fun Facts about Ruby – Volume 1

¡Por favor, siéntete libre de correr la voz y compartir este post! 🙏

¡Gracias por tu tiempo!

En Ruby, el ámbito de un programa está fuertemente correlacionado con el valor de self.

Aquí vamos a detallar cuáles son los valores de self cuando estamos en un método, una clase y en el ámbito de nivel superior.

Ámbito del método

En Ruby, el ámbito de nivel superior es el contexto del objeto main.

De hecho self se refiere al objeto main en este momento.

No dudes en leer el artículo sobre el modelo de objetos de Ruby si no estás familiarizado con el objeto main.

Ahora, ¿cuál es el contexto de self dentro de un método definido en el ámbito de nivel superior?

Aquí podemos ver que self también se refiere al objeto main.

La única diferencia es que no tenemos acceso a las variables locales declaradas en el ámbito de nivel superior dentro de nuestro método.

Esto se debe a que la palabra clave def incrusta el contenido del método en un ámbito completamente aislado.

Sin embargo, nuestro método puede acceder a las variables de instancia declaradas en el ámbito de nivel superior.

De hecho, como las variables de instancia se declaran en un nivel de objeto, entonces podemos acceder a estas variables en otro ámbito donde self se refiere al mismo objeto – el objeto main en nuestro caso.

Así, como self apunta a main tanto en el ámbito de nivel superior como en el método definido en el ámbito de nivel superior, podemos acceder a la variable de instancia @instance_variable en el método hello.

Ámbito de la clase

Cuando utilizamos la palabra clave class:

  • El valor de self cambia
  • El contenido de la clase se incrusta en un ámbito aislado

Veamos el siguiente ejemplo

Aquí podemos ver que en nuestra clase self tiene un valor diferente – se refiere a la clase Hello.

También no tenemos acceso a las variables y métodos definidos fuera de la clase.

Nótese que tenemos acceso a las variables de instancia en los métodos de instancia por las mismas razones descritas en la primera sección del artículo.

En la Parte II & III, vamos a jugar con los ámbitos utilizando módulos, clases anidadas y bloques (FLAT SCOPES).

Voilà !

Deja una respuesta

Tu dirección de correo electrónico no será publicada.