Escopo (computação): diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
Linha 83:
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.<ref name="appleby">{{Citar livro|autor=APPLEBY, Doris; VANDEKOPPLE, Julius J|título=Programming Languages|subtítulo=Paradigm and Practice|idioma=inglês|edição=2ª|local=New York|editora=McGraw-Hill|ano=1997|páginas=43|volumes=|volume=|
O escopo dinâmico é bastante fácil de implementar. Para encontrar o valor de um identificador, o programa poderia atravessar a pilha de execução, através da cadeia dinâmica, verificando cada [[Pilha de chamada#Estrutura|registro de ativação]] buscando um valor para o identificador. Na prática, isto torna-se mais eficiente através da utilização de uma [[lista de associação]], que é uma pilha de pares nome/valor. Pares são empilhados sempre que as declarações são feitas, e desempilhados no momento em que as variáveis deixam o escopo.<ref name="scott2">{{Citar livro|autor=SCOTT, Michael L|título=Programming Language Pragmatics|subtítulo=|idioma=inglês|edição=|local=San Francisco|editora=Morgam Kaufmann/Academic Press|ano=2000|páginas=132-137|volumes=|volume=|
=== Exemplos ===
|