Portões de escopo em Rubi: Parte I

>

>

>

Mehdi Farsi

Seguir

2 de setembro, 2019 – 3 min leia-se

Neste artigo, vamos explorar os seguintes tópicos:

  • âmbito do método
  • âmbito da classe

Antes de começar

Estou muito feliz em compartilhar com você nosso último projeto: Fun Facts about Ruby – Volume 1

Por favor, sinta-se livre para espalhar a palavra e compartilhar este post! 🙏

Obrigado pelo seu tempo!

Em Ruby, o âmbito de um programa está fortemente correlacionado com o valor de self.

Aqui vamos detalhar quais são os valores de self quando estamos num método, numa classe e no âmbito de nível superior.

Escopo do método

Em Ruby, o escopo de nível superior é o contexto do objeto main

Indeed self refere-se ao objeto main neste momento.

Feel free para ler o artigo do Ruby Object Model se você não estiver familiarizado com o objeto main.

Agora, qual é o contexto de self dentro de um método definido no escopo de nível superior?

Aqui podemos ver que self também se refere ao objeto main.

A única diferença é que não temos acesso às variáveis locais declaradas no escopo de nível superior dentro do nosso método.

Isso se deve ao fato de que a palavra-chave def incorpora o conteúdo do método em um escopo completamente isolado.

No entanto, nosso método pode acessar variáveis de instância declaradas no escopo de nível superior.

Indeed, como as variáveis de instância são declaradas em um nível de objeto, então podemos acessar essas variáveis em outro escopo onde self se refere ao mesmo objeto – o objeto main no nosso caso.

Então, como self aponta para main tanto no escopo de nível superior quanto no método definido no escopo de nível superior, podemos acessar a variável de instância @instance_variable no método hello.

Class scope

Quando usamos a palavra-chave class:

  • O valor de self muda
  • O conteúdo da classe está embutido em um escopo isolado

Vejamos o seguinte exemplo

Aqui podemos ver que em nossa classe self tem um valor diferente – refere-se à classe Hello.

>

Tambem não temos acesso a variáveis e métodos definidos fora da classe.

Nota que temos acesso a variáveis de instância em métodos de instância pelas mesmas razões descritas na primeira seção do artigo.

Na Parte II & III, vamos brincar com escopos usando módulos, classes aninhadas e blocos (FLAT SCOPES).

Voilà !

Deixe uma resposta

O seu endereço de email não será publicado.