Analista Legislativo (Tecnologia da Informação - Banco de Dados)
Um programador de Stored Procedures em um SGBD procedeu à refatoração de um código, utilizando uma variável local dentro de uma função aninhada que tem o mesmo nome de uma variável global.Sobre a aplicação das regras de escopo de variáveis em linguagens procedurais, assinale a afirmativa correta.
AEm linguagens que adotam o escopo dinâmico, a variável local sempre prevalece sobre a global, independentemente de onde a função foi definida.
BO escopo estático (ou léxico) determina que o identificador de uma variável seja resolvido com base em onde a função foi definida no código-fonte, e não de onde ela foi chamada.
CO escopo é irrelevante em linguagens estaticamente tipadas, pois a resolução de nomes de variáveis ocorre exclusivamente em tempo de execução.
DUma variável declarada dentro de um bloco só é acessível fora daquele bloco se for declarada como static.
EEm linguagens procedurais modernas, o escopo global é sempre preferível ao escopo local para simplificar a manutenção e evitar efeitos colaterais.
Revelar gabarito e comentário▾
GabaritoB — O escopo estático (ou léxico) determina que o identificador de uma variável seja resolvido com base em onde a função foi definida no código-fonte, e não de onde ela foi chamada.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Escopo de variáveis em linguagens procedurais
Gabarito: letra B. Em linguagens com escopo estático (ou léxico), a resolução de um identificador depende da estrutura do código onde a função foi definida, e não da cadeia de chamadas em tempo de execução. A alternativa B descreve exatamente esse conceito.
A questão testa o entendimento das regras de escopo — um tópico central para programação de stored procedures em SGBDs como Oracle (PL/SQL). É comum que programadores utilizem variáveis locais que ocultam variáveis globais de mesmo nome, e o comportamento depende do tipo de escopo adotado pela linguagem.
Alternativa
Afirmativa
Correta?
Justificativa
A
Em linguagens que adotam o escopo dinâmico, a variável local sempre prevalece sobre a global, independentemente de onde a função foi definida.
❌ Incorreta
O escopo dinâmico resolve nomes com base na cadeia de chamadas em tempo de execução, não sendo "independentemente de onde a função foi definida". A redação é enganosa ao afirmar "sempre prevalece" de forma absoluta.
B
O escopo estático (ou léxico) determina que o identificador de uma variável seja resolvido com base em onde a função foi definida no código-fonte, e não de onde ela foi chamada.
✅ Correta
Correta por definição. O escopo estático estabelece que a resolução depende da estrutura do código-fonte, independentemente da cadeia de chamadas. É a abordagem usada em PL/SQL, Java, C, entre outras.
C
O escopo é irrelevante em linguagens estaticamente tipadas, pois a resolução de nomes de variáveis ocorre exclusivamente em tempo de execução.
❌ Incorreta
É o oposto: linguagens estaticamente tipadas realizam a verificação de escopo e tipos em tempo de compilação, e a resolução de nomes é definida pelo escopo léxico, não ocorrendo apenas em execução.
D
Uma variável declarada dentro de um bloco só é acessível fora daquele bloco se for declarada como static.
❌ Incorreta
Em PL/SQL e na maioria das linguagens procedurais, uma variável declarada dentro de um bloco é acessível somente dentro daquele bloco. A declaração static (em linguagens como C) altera o tempo de vida, mas não torna a variável acessível fora do bloco.
E
Em linguagens procedurais modernas, o escopo global é sempre preferível ao escopo local para simplificar a manutenção e evitar efeitos colaterais.
❌ Incorreta
O escopo global é geralmente desencorajado por aumentar efeitos colaterais e dificultar a manutenção. O escopo local é preferível para encapsulamento e redução de dependências.
Escopo de variáveis: Estático (léxico) (Resolve pelo local da definição, PL/SQL, Java, C); Dinâmico (Resolve pela cadeia de chamadas, Menos comum); Global vs. local (Local oculta global, Local só acessível no bloco)
Alternativa A — ❌ Incorreta
A afirmação sobre escopo dinâmico está incorreta. Em escopo dinâmico, a variável local prevalece sobre a global durante a execução da função, mas isso depende do contexto de chamada (a cadeia de ativação), não sendo "independentemente de onde a função foi definida". Na verdade, o escopo dinâmico resolve nomes com base na sequência de chamadas em tempo de execução, e não na definição. A redação da alternativa é enganosa ao afirmar "sempre prevalece" de forma absoluta; embora na prática a variável local da função mais interna seja acessada, o princípio não é tão simplista.
Alternativa B — ✅ Correta ⟵ GABARITO
Correta por definição. O escopo estático (ou léxico) estabelece que um identificador é resolvido observando a estrutura do código-fonte: a variável referenciada é aquela declarada no bloco que envolve a definição da função, independentemente de onde a função é chamada. Essa é a abordagem usada em PL/SQL, Java, C, entre outras linguagens.
Alternativa C — ❌ Incorreta
Afirma que o escopo é irrelevante em linguagens estaticamente tipadas e que a resolução de nomes ocorre exclusivamente em tempo de execução. É o oposto: linguagens estaticamente tipadas realizam a verificação de escopo (e tipos) em tempo de compilação, e a resolução de nomes é definida pelo escopo léxico, não ocorrendo apenas em execução.
Alternativa D — ❌ Incorreta
Em PL/SQL e na maioria das linguagens procedurais, uma variável declarada dentro de um bloco é acessível somente dentro daquele bloco. A declaração static (em linguagens como C) altera o tempo de vida da variável, mas não a torna acessível fora do bloco. A afirmação de que seria necessária a palavra static para acesso externo é falsa.
Alternativa E — ❌ Incorreta
O uso excessivo de variáveis globais dificulta a manutenção e aumenta os efeitos colaterais. Boas práticas recomendam escopo local sempre que possível, para encapsulamento e redução de acoplamento. Logo, a afirmativa inverte a recomendação.