Usina BRAdvPL Guia
Entrar
← CatálogoFUNDAMENTO

Escopo de
variáveis

O escopo determina onde uma variável pode ser acessada e por quanto tempo seu valor permanece disponível durante a execução.

DECLARAÇÃO EXPLÍCITA
Local nNumero := 10

O identificador informa que nNumero pertence ao escopo local da função.

ESCOPOVISIBILIDADEDURAÇÃO
LOCALSomente a rotina que declarouAté o retorno da funçãoSTATICDepende do local da declaraçãoDurante a execução do ambientePRIVATEEscopo dinâmicoAté o retorno da função criadoraPUBLICGlobal, salvo quando ocultada por PrivateAté o fim da execução
01

LOCAL

Função atual

Criada a cada ativação da função. Chamadas recursivas recebem conjuntos independentes de variáveis locais.

Visibilidade
Somente a rotina que declarou
Duração
Até o retorno da função
EXEMPLO
User Function Pai()
    Local nVar := 10
    Filha()
Return .T.

Static Function Filha()
    // nVar não está visível aqui
Return
02

STATIC

Rotina ou arquivo

Dentro de uma função, permanece restrita à rotina e conserva o valor entre chamadas. Fora das rotinas, pode ser acessada no arquivo atual.

Visibilidade
Depende do local da declaração
Duração
Durante a execução do ambiente
EXEMPLO
User Function Contador()
    Static nChamadas := 0
    nChamadas++
    ConOut(nChamadas)
Return
03

PRIVATE

Função criadora e chamadas descendentes

Pode ser declarada ou criada implicitamente por atribuição. Uma Private de mesmo nome em uma função chamada oculta temporariamente a anterior.

Visibilidade
Escopo dinâmico
Duração
Até o retorno da função criadora
EXEMPLO
User Function Pai()
    Private nVar := 10
    Filha()
Return .T.

Static Function Filha()
    ConOut(nVar) // 10
Return
04

PUBLIC

Todo o ambiente

Permanece disponível após o retorno da função criadora. Sem inicialização explícita, assume o valor lógico falso (.F.).

Visibilidade
Global, salvo quando ocultada por Private
Duração
Até o fim da execução
EXEMPLO
User Function CriarStatus()
    Public lSistemaAtivo := .T.
Return

User Function ConsultarStatus()
    ConOut(lSistemaAtivo)
Return
BOA PRÁTICA

Declare a intenção

Prefira `LOCAL` para dados temporários e `STATIC` quando houver necessidade real de preservar estado. Use `PRIVATE` e `PUBLIC` somente quando a visibilidade dinâmica ou global fizer parte do desenho da rotina.

REFERÊNCIAS
  1. SILVA, Waterloo Ferreira da. A Linguagem AdvPL. 2004, p. 22-24. Conteúdo resumido, revisado e exemplos adaptados.
  2. TOTVS. O Contexto de Variáveis dentro de um Programa. TDN.
  3. TOTVS. Criação e Atribuição de Variáveis. TDN.
  4. TOTVS. SDK Microsiga Protheus. TDN — referência complementar.