Portes de portée en Ruby : Partie I

.

Mehdi Farsi

Follow

Sep 2, 2019 – 3 min lu

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.