Escopo (computação): diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Linha 87:
Com escopo dinâmico, cada identificador tem uma [[Pilha (informática)|pilha]] global de [[vinculação (computação)|vinculações]]. Introduzindo uma variável local com o nome de ''x'' empilha uma vinculação na pilha global ''x'' (que pode estar vazia), que estará desempilhada quando o fluxo de controle deixar o escopo. Avaliar ''x'' em qualquer contexto sempre produz a vinculação mais ao topo. Em outras palavras, um identificador global refere-se ao identificador associado com o ambiente mais recente. Note-se que isso não pode ser feito em tempo de compilação, porque a pilha de vinculação só existe em tempo de execução, razão pela qual este tipo de delimitação é chamado de ''escopo dinâmico''.
 
Geralmente, alguns [[Bloco (computação)|blocos]] são definidos para criar vinculações cujo tempo de vida útil é o tempo de execução do bloco; isso adiciona algumas funcionalidades do escopo estático para o processo de escopo dinâmico. No entanto, como uma seção de código pode ser chamada de diferentes locais e situações, pode ser difícil determinar desde o início quais vinculações serão aplicadas quando uma variável for utilizada (ou se a sua existência naquele contexto). Isto pode ser benéfico. a aplicação do princípio do menor conhecimento sugere que o código evita, dependendo de razões para (ou circunstâncias) o valor de uma variável, simplesmente usando o valor de acordo com a sua definição. Esta interpretação restritiva de dados compartilhados pode fornecer um sistema muito flexível para adaptar o comportamento de uma função para o estado atual (ou política) do sistema. No entanto, este benefício depende da documentação cuidadosa de todas as variáveis usadas dessa maneira, bem como na prevenção cuidadosa das suposições sobre o comportamento de uma variável, e não prevê qualquer mecanismo para detectar interferências entre as diferentes partes de um programa. Como tal, o escopo dinâmico pode ser perigoso e poucas linguagens modernas o usam. Algumas linguagens, como o [[Perl]] e [[Common Lisp]], permitem que o programador escolha o escopo estático ou dinâmico, quando da definição ou redefinição de uma variável. [[John McCarthy]] projetou a linguagem [[Lisp]] com escopo dinâmico objetivando compartilhamento de código com variáveis livres. [[APL]], [[Logo]] e [[Emacs lisp ]] são outros exemplos de linguagens que usam escopo dinâmico.
 
<!--