Veja também: Variáveis livres e variáveis vinculadas

O escopo de uma variável descreve onde no texto de um programa a variável pode ser usada, enquanto a extensão (ou vida útil) descreve quando na execução de um programa uma variável tem um valor (significativo). O escopo de uma variável é na verdade uma propriedade do nome da variável, e a extensão é uma propriedade da própria variável. Estes não devem ser confundidos com contexto (também chamado ambiente), que é uma propriedade do programa, e varia de acordo com o ponto no código fonte ou execução – ver escopo: uma visão geral. Além disso, a vida útil do objeto pode coincidir com a vida útil da variável, mas em muitos casos não está ligada à vida útil da variável.

O escopo de um nome de variável afeta sua extensão.

O escopo é uma parte importante da resolução do nome de uma variável. A maioria dos idiomas define um escopo específico para cada variável (assim como qualquer outra entidade nomeada), que pode diferir dentro de um determinado programa. O escopo de uma variável é a parte do código do programa para a qual o nome da variável tem significado e para a qual a variável é dita “visível”. A entrada nesse escopo tipicamente inicia a vida útil de uma variável (conforme ela entra no contexto) e a saída desse escopo tipicamente termina sua vida útil (conforme ela sai do contexto). Por exemplo, uma variável com “escopo léxico” é significativa apenas dentro de uma determinada função/sub-rotina, ou mais finamente dentro de um bloco de expressões/esclarecimentos (de acordo com o escopo da função ou escopo do bloco); isto é resolução estática, performável em tempo parcial ou tempo de compilação. Alternativamente, uma variável com escopo dinâmico é resolvida em tempo de execução, com base em uma pilha de vinculação global que depende do fluxo de controle específico. As variáveis acessíveis apenas dentro de uma determinada função são denominadas “variáveis locais”. Uma “variável global”, ou uma com escopo indefinido, pode ser referida em qualquer parte do programa.

Extenso, por outro lado, é um aspecto de tempo de execução (dinâmico) de uma variável. Cada ligação de uma variável a um valor pode ter a sua própria extensão em tempo de execução. A extensão da vinculação é a parte do tempo de execução do programa durante a qual a variável continua a se referir ao mesmo valor ou local de memória. Um programa em execução pode entrar e sair de uma determinada extensão muitas vezes, como no caso de um fechamento.

Antes da linguagem de programação, uma variável cuja extensão dura mais tempo do que o seu escopo pode resultar em um vazamento de memória, onde a memória alocada para a variável nunca pode ser liberada, uma vez que a variável que seria usada para referenciá-la para fins de desalocação não é mais acessível. No entanto, pode ser permitido que a vinculação de uma variável se estenda para além do seu escopo, como ocorre nos fechamentos de Lisp e variáveis locais estáticas C; quando a execução passa novamente para o escopo da variável, a variável pode ser usada novamente. Uma variável cujo escopo começa antes de sua extensão é dita não-inicializada e frequentemente tem um valor arbitrário indefinido se acessada (veja ponteiro selvagem), uma vez que ainda não foi explicitamente dado um valor em particular. Uma variável cuja extensão termina antes de seu escopo pode se tornar um ponteiro pendular e ser considerada novamente não-inicializada, uma vez que seu valor foi destruído. As variáveis descritas pelos dois casos anteriores podem ser consideradas fora do escopo ou não vinculadas. Em muitos idiomas, é um erro tentar usar o valor de uma variável quando ela está fora do escopo. Em outros idiomas, fazer isso pode produzir resultados imprevisíveis. A tal variável pode, no entanto, ser atribuído um novo valor, o que lhe dá uma nova extensão.

Para eficiência de espaço, um espaço de memória necessário para uma variável pode ser atribuído apenas quando a variável é usada pela primeira vez e libertado quando já não é necessária. Uma variável só é necessária quando está no escopo, iniciando assim a vida útil de cada variável quando ela entra no escopo pode dar espaço para variáveis não utilizadas. Para evitar o desperdício desse espaço, os compiladores frequentemente avisam os programadores se uma variável for declarada mas não utilizada.

É considerado uma boa prática de programação tornar o escopo das variáveis tão estreito quanto possível para que diferentes partes de um programa não interajam acidentalmente umas com as outras modificando as variáveis umas das outras. Fazendo isso também previne a ação à distância. Técnicas comuns para fazer isso são ter diferentes seções de um programa usando diferentes espaços de nome, ou tornar variáveis individuais “privadas” através do escopo de variáveis dinâmicas ou do escopo de variáveis léxicas.

Muitas linguagens de programação empregam um valor reservado (muitas vezes chamado nulo ou nulo) para indicar uma variável inválida ou não-inicializada.

Deixe uma resposta

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