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à !