Escopo (computação): diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
m |
|||
Linha 41:
O escopo léxico ou estático foi introduzido pela linguagem [[ALGOL 60]]. O escopo é assim denominado, porque pode ser determinado estaticamente, ou seja, antes da execução.<ref name="sebesta" /> Com escopo léxico, um nome sempre se refere ao seu ambiente léxico (mais ou menos) local. Esta é uma propriedade do texto do programa e é feita independente da pilha de chamadas em tempo de execução pela implementação da linguagem. Ou seja, O escopo léxico de uma declaração é a parte do texto do programa, onde a utilização do identificador é uma referência a essa declaração particular do identificador.<ref name="pratt">{{Citar livro|autor=PRATT, Terrence W.; ZELKOWITZ, Marvin V|título=Programming Languages|subtítulo=Design and Implementation|idioma=inglês|edição=4ª|local=Upper Saddle River, New Jersey|editora=Prentice hall|ano=2001|páginas=364|volumes=|volume=|id=ISBN 0-13-027678-2}}</ref> Pelo fato de esta correspondência só exigir a análise do texto do programa estático, este tipo de delimitação de escopo é também chamado de escopo estático.
O escopo estático é padrão em todas as linguagens baseadas na [[ALGOL]], tais como [[Pascal (linguagem de programação)|Pascal]], [[Ada (linguagem de programação)|ADA]] e [[C (linguagem de programação)|C]], bem como em linguagens funcionais modernas, tais como [[ML (linguagem de programação)|ML]] e [[Haskell (linguagem de programação)|Haskell]], pois permite que o programador possa elaborar raciocínios sobre valores, parâmetros e referências a objetos (ou seja, variáveis, constantes, funções etc), como substituições de nome simples. Isso torna muito mais fácil fazer o código modular e se raciocinar sobre ele, já que a estrutura local de nomeação pode ser entendida isoladamente. Em contraste, o escopo dinâmico força o programador a antecipar todos os possíveis contextos dinâmicos nos quais o código do módulo pode ser invocado.
<!--▼
Por exemplo, considere o seguinte fragmento de programa em Pascal:
<source lang="pascal">
Linha 59 ⟶ 57:
var M:real;
begin
(*
end;
procedure D;
var K:integer;
begin
(*escopo A+B+D*)
end;
begin
(*
end;
begin
(*
end.
</source>
▲<!--
The variable I is visible at all points, because it is never hidden by another variable of the same name. The char variable K is visible only in the main program because it is hidden by the real variable K visible in procedure B and C only. Variable L is also visible only in procedure B and C but it does not hide any other variable. Variable M is only visible in procedure C and therefore not accessible either from procedure B or the main program. Also, procedure C is visible only in procedure B and can therefore not be called from the main program.
|