Skip to content

Escopos

Leonel Sanches da Silva edited this page Jan 10, 2022 · 8 revisions

Escopos são momentos na execução de um programa em que certos elementos existem ou não, tais como variáveis, funções, objetos, etc., e são definidos por blocos de escopo.

Blocos de escopo normalmente são usados para definir funções, métodos e classes, mas Delégua suporta blocos de escopo órfãos, como no exemplo abaixo:

{ // Isso é um bloco de escopo órfão, ou seja, não pertence a qualquer estrutura da linguagem, 
  // como uma classe, uma função ou um método
  var a = "1";
}

escreva(a); // sinaliza erro, porque `a` foi declarada dentro de um bloco de escopo que já finalizou sua execução.

Blocos de escopo são declarados entre chaves, { e }.

Toda execução de Delégua, seja pelo modo LAIR, seja pela execução de um programa, possui um escopo padrão, também chamado de escopo global.

Variáveis declaradas no escopo global podem ser acessadas por um escopo mais interno, mas o contrário não é possível (como no exemplo anterior). O exemplo a seguir demonstra como é possível acessar uma variável definida no escopo global por um bloco de escopo órfão.

var a = "1";
{
  escreva(a); // escreve 1, pois um escopo mais restritivo tem acesso ao escopo ao qual foi declarado.
}

O escopo interno pode alterar variáveis de escopos ancestrais sem necessidade de nova declaração.

var a = "1";
{
  a = "2";
}

escreva(a); // escreve 2

No entanto, se uma nova variável é declarada dentro de um escopo filho com o mesmo nome de outra variável num escopo pai, a variável declarada no escopo pai não pode mais ser acessada pelo nome no escopo filho.

var a = "1";
{
  var a = "2";
  escreva(a); // escreve 2
}

escreva(a); // escreve 1