Usina BRGuía AdvPL
Ingresar
← CatálogoFUNDAMENTO

Ámbito de
variables

El ámbito determina dónde puede accederse a una variable y durante cuánto tiempo permanece disponible su valor.

DECLARACIÓN EXPLÍCITA
Local nNumero := 10

El identificador indica que nNumero pertenece al ámbito local de la función.

ÁMBITOVISIBILIDADDURACIÓN
LOCALSolo la rutina que la declaróHasta que la función retorneSTATICDepende del lugar de declaraciónDurante la ejecución del entornoPRIVATEÁmbito dinámicoHasta que retorne la función creadoraPUBLICGlobal, salvo que una Private la oculteHasta el final de la ejecución
01

LOCAL

Función actual

Se crea en cada activación de la función. Las llamadas recursivas reciben conjuntos independientes de variables locales.

Visibilidad
Solo la rutina que la declaró
Duración
Hasta que la función retorne
EJEMPLO
User Function Pai()
    Local nVar := 10
    Filha()
Return .T.

Static Function Filha()
    // nVar no está visible aquí
Return
02

STATIC

Rutina o archivo

Dentro de una función queda restringida a la rutina y conserva su valor entre llamadas. Fuera de las rutinas puede accederse desde el archivo actual.

Visibilidad
Depende del lugar de declaración
Duración
Durante la ejecución del entorno
EJEMPLO
User Function Contador()
    Static nChamadas := 0
    nChamadas++
    ConOut(nChamadas)
Return
03

PRIVATE

Función creadora y llamadas descendientes

Puede declararse o crearse implícitamente mediante asignación. Una Private con el mismo nombre en una función llamada oculta temporalmente la anterior.

Visibilidad
Ámbito dinámico
Duración
Hasta que retorne la función creadora
EJEMPLO
User Function Pai()
    Private nVar := 10
    Filha()
Return .T.

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

PUBLIC

Todo el entorno

Permanece disponible después del retorno de la función creadora. Sin inicialización explícita, asume el valor lógico falso (.F.).

Visibilidad
Global, salvo que una Private la oculte
Duración
Hasta el final de la ejecución
EJEMPLO
User Function CriarStatus()
    Public lSistemaAtivo := .T.
Return

User Function ConsultarStatus()
    ConOut(lSistemaAtivo)
Return
BUENA PRÁCTICA

Declara la intención

Prefiere `LOCAL` para datos temporales y `STATIC` cuando realmente sea necesario conservar estado. Usa `PRIVATE` y `PUBLIC` solo cuando la visibilidad dinámica o global forme parte del diseño de la rutina.

REFERENCIAS
  1. SILVA, Waterloo Ferreira da. A Linguagem AdvPL. 2004, p. 22-24. Contenido resumido y revisado; ejemplos adaptados.
  2. TOTVS. El contexto de variables dentro de un programa. TDN.
  3. TOTVS. Creación y asignación de variables. TDN.
  4. TOTVS. SDK Microsiga Protheus. TDN — referencia complementaria.