🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu
Envio Por Referência ou por Valor:
Um aspecto importante do envio de parâmetros para as funções é se eles são passados por referência ou por valor. O método de envio de um argumento dependerá do método de chamada; ele não pode ser determinado no ponto em que a própria função é definida.
Quando os parâmetros são passados por referência, a função recebe ponteiros para os verdadeiros parâmetros, e quaisquer mudanças que ela introduzir neles serão imediatamente refletidas em seus valores:
User Function Test1()
Local nVar
nVar := 3
U_Test2( @nVar )
//Apos o retorno de U_Test2() nVar terá o conteúdo igual 1
Return( NIL )
User Function Test2( nVar1 )
nVar1 := 1
Return( NIL )
Para efetuarmos a passagem por referência devemos prefixar a variável com o operador de referência @.
Se passarmos um parâmetro por valor, o valor inicializará a variável local ou privada associada com o parâmetro formal, mais quaisquer mudanças introduzidas neste valor pela função desaparecerão. O verdadeiro parâmetro não é alterado pela operação da função.
User Function Test1()
Local nVar
nVar := 3
U_Test2( nVar )
//Apos o retorno de U_Test2() nVar terá o conteúdo igual 3
Return( NIL )
User Function Test2( nVar1 )
nVar1 := 1
Return( NIL )
A chamada a U_Test2( nVar ) determina o envio de parâmetros por valor, pois o operador de referência @ não foi utilizado.
Os campos de banco de dados são exceções. Eles sempre são passados por valor, independentemente do estilo de chamada; caso contrário, toda vez que o parâmetro formal fosse mudado, seria necessário atualizar o banco de dados. Mas isso só é valido se o campo do banco de dados estiver prefixado pelo alias. Exemplo:
dbSelectArea( “SRA” ) //Seleciona a área de trabalho SRA
U_Teste1( @SRA->RA_MAT ) //irá gerar erro durante a compilação
U_Teste1( @RA_MAT ) //irá gerar erro na execução
U_teste1( @_Field->RA_MAT ) //irá gerar erro na execução
SRA->( U_teste1( @RA_MAT ) ) //irá gerar erro na execução
Recomendação: Para que não ocorra erro de execução, sempre prefixe o campo com o alias correspondente para que seja possível identificar se um campo de tabela está sendo passado por referência.
Um aspecto importante do envio de parâmetros para as funções é se eles são passados por referência ou por valor. O método de envio de um argumento dependerá do método de chamada; ele não pode ser determinado no ponto em que a própria função é definida.
Quando os parâmetros são passados por referência, a função recebe ponteiros para os verdadeiros parâmetros, e quaisquer mudanças que ela introduzir neles serão imediatamente refletidas em seus valores:
User Function Test1()
Local nVar
nVar := 3
U_Test2( @nVar )
//Apos o retorno de U_Test2() nVar terá o conteúdo igual 1
Return( NIL )
User Function Test2( nVar1 )
nVar1 := 1
Return( NIL )
Para efetuarmos a passagem por referência devemos prefixar a variável com o operador de referência @.
Se passarmos um parâmetro por valor, o valor inicializará a variável local ou privada associada com o parâmetro formal, mais quaisquer mudanças introduzidas neste valor pela função desaparecerão. O verdadeiro parâmetro não é alterado pela operação da função.
User Function Test1()
Local nVar
nVar := 3
U_Test2( nVar )
//Apos o retorno de U_Test2() nVar terá o conteúdo igual 3
Return( NIL )
User Function Test2( nVar1 )
nVar1 := 1
Return( NIL )
A chamada a U_Test2( nVar ) determina o envio de parâmetros por valor, pois o operador de referência @ não foi utilizado.
Os campos de banco de dados são exceções. Eles sempre são passados por valor, independentemente do estilo de chamada; caso contrário, toda vez que o parâmetro formal fosse mudado, seria necessário atualizar o banco de dados. Mas isso só é valido se o campo do banco de dados estiver prefixado pelo alias. Exemplo:
dbSelectArea( “SRA” ) //Seleciona a área de trabalho SRA
U_Teste1( @SRA->RA_MAT ) //irá gerar erro durante a compilação
U_Teste1( @RA_MAT ) //irá gerar erro na execução
U_teste1( @_Field->RA_MAT ) //irá gerar erro na execução
SRA->( U_teste1( @RA_MAT ) ) //irá gerar erro na execução
Recomendação: Para que não ocorra erro de execução, sempre prefixe o campo com o alias correspondente para que seja possível identificar se um campo de tabela está sendo passado por referência.
Comentários
Postar um comentário