Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: AdvPL/TLPP Estudando xBase: A Linguagem "Pátria

_Créditos da imagem: Gerada com auxílio do ChatGPT/Gemini_ **Domine AdvPL/TLPP Estudando xBase: A Linguagem "Pátria"** Você quer ser um programador proficiente em **AdvPL/TLPP**? Está em busca de cursos online, suporte via Skype ou Facebook? Que tal uma abordagem que realmente faça você **dominar** essas linguagens entendendo suas bases? Eu domino o AdvPL/TLPP porque **não estudo diretamente essa linguagen**. O segredo? Eu estudo **xBase**, a "linguagem pátria" que deu origem ao AdvPL/TLPP. Ao compreender a xBase, você adquire uma base sólida para dominar suas variações e derivados. E qual é a melhor e maior fonte de conhecimento xBase hoje? Sem dúvidas, é o projeto **(x)Harbour**. Este compilador e repositório oferece uma vasta coleção de exemplos e ferramentas que não só aprimoram suas habilidades, mas também ampliam sua compreensão do funcionamento interno da linguagem. Algumas sugestões práticas para iniciar sua jornada: - **Explore os exemplos no projet

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

Arrays como Parâmetro:

Ao escrever uma função nós a definimos em termos de parâmetros. Chamamos esses parâmetros de Parâmetros Formais da função. Quando chamamos a função, fornecemos os parâmetros que denominamos Parâmetros Reais.

Quando passamos um Array como parâmetro, o Advpl faz o parâmetro formal apontar para o mesmo local indicado pelo parâmetro real. Dessa forma, poderemos mudar os elementos do Array fazendo atribuições a seus parâmetros.

Se o parâmetro real tiver um escopo Public ou Private, ele ficará também visível dentro da rotina chamada. Portanto, poderemos usar o operador == para verificar se eles realmente apontam para o mesmo array. Exemplo:

Private aNomes := { “P.A.Cabral” , “Santos Dumont” }

Test( aNomes )

Function Test( aFormal )
Return( aFormal == aNomes ) //.T.(apenas porque se referem ao //mesmo ponteiro)



Podemos, concluir, a partir disto, que os array são passados por referência;
acima de tudo, podemos mudar seus elementos. Entretanto, precisamos distinguir entre a própria variável array e os elementos a que ela se refere. Ao passar um array, como demonstrado, estamos passando uma referência aos elementos do array; conseqüentemente, a rotina receptora poderá alterá-los por meio de referência. Entretanto, ela pode mudar a própria referência? Ela pode fazer a referência apontar para outra array?

Examinemos o seguinte fragmento de programa:

Local aNomes := { “P.A.Cabral” , “Santos Dumont” }

U_Test( aNomes )

Alert( aNomes[1] ) // P.A.Cabral

User Function Test( aFormal )

Alert( aFormal[1] ) // P.A.Cabral

aFormal := { “Einstein” , “Leibiniz” }

Return( NIL )

A função U_Test() atribui seu parâmetro formal, aFormal, a um novo Array, mas isto não afeta o que aNomes indica. Ela simplesmente cria um novo Array e faz aFormal apontar para ele; aNomes permanece inalterado. É como se tivéssemos atribuído um tipo de dado diferente a aFormal – aNomes continua inalterado no retorno.

Disso podemos concluir que os Arrays são passados por valor! Não podemos mudar o parâmetro. Parece confuso mas: a variável array é passada por valor. Isto significa que não podemos mudar “aquilo para o qual ela estiver apontando”. Entretanto, como as variáveis de arrays são simples referências para os arrays, podemos mudar o conteúdo dos elementos do array, uma vez que sua rotina recebe uma referência a eles.

Comentários

Postagens mais visitadas