Dans cet article, nous allons explorer les sujets suivants :
- périmètre des méthodes
- périmètre des classes
Avant de commencer
Je suis ravi de partager avec vous notre dernier projet : Fun Facts about Ruby – Volume 1
N’hésitez pas à faire passer le mot et à partager ce post ! 🙏
Merci pour votre temps!
En Ruby, la portée d’un programme est fortement corrélée à la valeur de self
.
Nous allons ici détailler quelles sont les valeurs de self
lorsque nous sommes dans une méthode, une classe et dans la portée de niveau supérieur.
Portée de la méthode
En Ruby, la portée de haut niveau est le contexte de l’objet main
.
En effet, self
fait référence à l’objet main
en ce moment.
N’hésitez pas à lire l’article Ruby Object Model si vous n’êtes pas familier avec l’objet
main
.
Maintenant, quel est le contexte de self
au sein d’une méthode définie dans la portée de haut niveau ?
Nous pouvons voir ici que self
fait également référence à l’objet main
.
La seule différence est que nous n’avons pas accès aux variables locales déclarées dans la portée de haut niveau au sein de notre méthode.
Cela est dû au fait que le mot-clé def
embarque le contenu de la méthode dans une portée complètement isolée.
Cependant, notre méthode peut accéder aux variables d’instance déclarées dans la portée de niveau supérieur.
En effet, comme les variables d’instance sont déclarées au niveau d’un objet, alors nous pouvons accéder à ces variables dans une autre portée où self
fait référence au même objet – l’objet main
dans notre cas.
Donc, comme self
pointe vers main
soit dans la portée de niveau supérieur et dans la méthode définie dans la portée de niveau supérieur, nous pouvons accéder à la variable d’instance @instance_variable
dans la méthode hello
.
Portée de la classe
Lorsque nous utilisons le mot-clé class
:
- La valeur de
self
change - Le contenu de la classe est intégré dans une portée isolée
Regardons l’exemple suivant
Ici nous pouvons voir que dans notre classe self
a une valeur différente – elle fait référence à la classe Hello
.
De plus, nous n’avons pas accès aux variables et aux méthodes définies en dehors de la classe.
Notez que nous avons accès aux variables d’instance dans les méthodes d’instance pour les mêmes raisons décrites dans la première section de l’article.
Dans la partie II & III, nous allons jouer avec les scopes en utilisant des modules, des classes imbriquées et des blocs (FLAT SCOPES).
Voilà !