O que é $ e & em advpl

Olá,

O & permite executar um valor em ADVPL, em explicação resumida, ele permite interpretar um trecho de código durante a execução, sem a necessidade de uma compilação, ela possui limitações se comparado a um código compilado.

A macro é muito útil para lhe dar com valores dinâmicos, como os dicionários do Protheus, cada campo pode possuir uma validação e essas validações normalmente são executadas via macro.


cMacro := "ConOut('Xisto')"
&cMacro

Esse exemplo vai chamar a função ConOut com o parâmetro Xisto, veja que o conteúdo de uma string acaba sendo executado como um código normal.

O $ é um operador de contido, ele permite verificar se uma string está contida em outra. Você pode comparar esse operador com o método includes da String do Javascript.


if "Xisto" $ "XistoX"
endif

Esse exemplo vai retornar verdadeiro, pois a string Xisto está contida em XistoX.


No exemplo abaixo, o IF está verificando se o conteúdo presente na variável cCampo está contido na string "A5_PRODUTO/A5_NOMEFOR".


If cCampo $ ("A5_PRODUTO/A5_NOMEFOR")

Já nesse exemplo, está sendo verificado se _nOpcx (convertido para string) está contido em "346", caso essa condição seja verdadeira, a variável lRet receberá a macro da variável cLineOK, a variável cLineOK provavelmente possui uma string com o nome de uma função, como "U_LinhaOk()", ao chamar a macro desse valor, a função U_LinhaOk será executada.


If Str(_nOpcx,1,0)$"346"
   lRet := &cLineOK


Documentações:

https://tdn.totvs.com/pages/viewpage.action?pageId=6063087

https://tdn.totvs.com/display/tec/Operadores+Comuns