Parâmetros por valor e por referência
Helper(nValue); Helper(@nValue)Distingue cópia do valor escalar de alteração da variável chamadora.
Visão geral
Na chamada comum, atribuir um novo número ao parâmetro não troca a variável numérica do chamador. Com @ na chamada, a função pode modificar essa variável por referência. Argumentos são posicionais; nomes locais não fazem correspondência por nome. O exemplo usa apenas um escalar para separar os dois comportamentos. Arrays e objetos exigem análise adicional de compartilhamento de conteúdo; passar um contêiner não equivale a produzir uma cópia independente de todos os seus elementos. (Fontes: refs. 1–2.)
Sintaxe
Helper(nValue); Helper(@nValue)Exemplo comentado
#Include "Protheus.ch"
User Function Ed570()
Local nValor := 10
// Apenas a segunda chamada pode trocar a variavel do chamador.
IncrementValue(nValor)
ConOut(cValToChar(nValor))
IncrementValue(@nValor)
ConOut(cValToChar(nValor))
Return Nil
Static Function IncrementValue(nValor)
nValor := nValor + 1
Return nValorApós chamada por valor: 10. Após chamada por referência: 11. Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.
- Documentar quais argumentos podem ser alterados e validar tipos antes de calcular. Evitar efeitos ocultos e não passar constantes como variáveis de saída.
- Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.

Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.