Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode (17) :: Comparando Implementações do Desafio "Letter Combinations of a Phone Number" em Harbour e TOTVS TLPP

_Créditos das imagens: ChatGPT_ # LeetCode (17) :: Comparando Implementações do Desafio "Letter Combinations of a Phone Number" em Harbour e TOTVS TLPP O desafio [**"Letter Combinations of a Phone Number"**](https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/) (Combinações de Letras de um Número de Telefone) é um problema clássico de programação que envolve a geração de todas as combinações possíveis de letras que um número de telefone pode representar, com base no mapeamento tradicional dos teclados de telefone. Abaixo, comparamos duas implementações desse desafio: uma em **Harbour** e outra em **TOTVS TLPP** (TOTVS Language Plus Plus). ## O Desafio Dada uma string contendo dígitos de 2 a 9, retorne todas as combinações possíveis de letras que esses dígitos podem representar. O mapeamento dos dígitos para as letras é o mesmo dos teclados de telefone tradicionais: - 2: "abc" - 3: "def" - 4: "ghi" - 5: ...

Protheus :: Programação Básica em Advpl “Combo XXIV”

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.

Comentários

Postagens mais visitadas