Protheus :: Programação Básica em Advpl “Combo XXIX”
STATIC e PUBLIC:
TEST1.PRG
Static nVar := 0 //Static em nível de arquivo ( externa )
User Function A()
Alert( Str( nVar ) ) //nVar será zero aqui...
nVar := 10
Return( NIL )
User Function B()
Alert( Str( nVar ) ) //nVar será 10 aqui...
Return( NIL )
User Function C()
Static nVar //Static em nível de função ( interna )
DEFAULT nVar := 0
Return( ++nVar )
TEST2.PRG
User Function Test() //nVar não está disponível em Test2()
Local nLoop
Local nLoops
Local nRetC
U_A() //aqui acessando a variável Static Externa
U_B() //aqui acessando a variável Static Externa
nLoops := 15
For nLoop := 1 To nLoops
nRetC := U_C() //aqui acessando a variável Static Interna
Alert( Str( nRetC ) )//nVar em U_C será incrementada a cada
//iteração do Loop
Next nLoop
Return( NIL )
Estas duas instruções também declaram variáveis. PUBLIC declara variáveis que ficam visíveis durante todo o programa. Os problemas que examinamos com relação as variáveis Private também ocorrem com as variáveis Public, contudo com mais abrangência. Em vez de isolados a rotinas chamadas a partir de uma função, os problemas ocorrem na aplicação inteira.
As variáveis STATIC podem ajudar a solucionar este problema. Existem dois tipos de variáveis static: internas e externas. A diferença está na abrangência. As variáveis static em nível de arquivo abrangem o arquivo: elas ficam visíveis em qualquer função ou rotina dentro do arquivo de programa no qual estão declaradas. As variáveis static declaradas dentro de uma função ( static internas ) tem escopo local, exatamente como as variáveis local.
Obs.: No Protheus, as variáveis Static criadas à partir do menu, serão liberadas sempre que se voltar para o menu. Já as Static criadas durante a entrada do sistema serão mantidas enquanto o sistema estiver sendo usado.
A característica principal da variável Static é que ela pode sair do escopo e não conseguirmos mais acessá-la, mas, na próxima vez que em que entrarmos no programa ou função que a declarou ela terá o mesmo valor da última vez em que o programa ou função foi executado. Exemplo:
As variáveis STATIC podem ajudar a solucionar este problema. Existem dois tipos de variáveis static: internas e externas. A diferença está na abrangência. As variáveis static em nível de arquivo abrangem o arquivo: elas ficam visíveis em qualquer função ou rotina dentro do arquivo de programa no qual estão declaradas. As variáveis static declaradas dentro de uma função ( static internas ) tem escopo local, exatamente como as variáveis local.
Obs.: No Protheus, as variáveis Static criadas à partir do menu, serão liberadas sempre que se voltar para o menu. Já as Static criadas durante a entrada do sistema serão mantidas enquanto o sistema estiver sendo usado.
A característica principal da variável Static é que ela pode sair do escopo e não conseguirmos mais acessá-la, mas, na próxima vez que em que entrarmos no programa ou função que a declarou ela terá o mesmo valor da última vez em que o programa ou função foi executado. Exemplo:
TEST1.PRG
Static nVar := 0 //Static em nível de arquivo ( externa )
User Function A()
Alert( Str( nVar ) ) //nVar será zero aqui...
nVar := 10
Return( NIL )
User Function B()
Alert( Str( nVar ) ) //nVar será 10 aqui...
Return( NIL )
User Function C()
Static nVar //Static em nível de função ( interna )
DEFAULT nVar := 0
Return( ++nVar )
TEST2.PRG
User Function Test() //nVar não está disponível em Test2()
Local nLoop
Local nLoops
Local nRetC
U_A() //aqui acessando a variável Static Externa
U_B() //aqui acessando a variável Static Externa
nLoops := 15
For nLoop := 1 To nLoops
nRetC := U_C() //aqui acessando a variável Static Interna
Alert( Str( nRetC ) )//nVar em U_C será incrementada a cada
//iteração do Loop
Next nLoop
Return( NIL )
Comentários
Postar um comentário