Pular para o conteúdo principal

Postagem em destaque

BlackTDN NEWS :: 2025.02.20 :: 01:20:38

_Créditos das imagens: ChatGPT # Preço de notebooks deve subir 10% nos EUA por causa de Trump, diz CEO da Acer **Fonte:** Tecmundo.com.br **Autor:** Nilton Cesar Monastier Kleina **Publicado em:** 2025-02-19T15:15:00Z ![Imagem](https://tm.ibxk.com.br/2025/02/19/19115140013293.jpg?ims=1200xorig) > A intensificação da guerra comercial entre Estados Unidos e China deve levar ao aumento no preço de notebooks no país norte-americano. O gerente executivo da fabricante Acer, Jason Chen, confirmou a possível alteração em entrevista ao jornal The Telegraph.O C… [Leia mais](https://www.tecmundo.com.br/mercado/402725-preco-de-notebooks-deve-subir-10-nos-eua-por-causa-de-trump-diz-ceo-da-acer.htm) --- # Chatbot de Musk diz que vai tornar governo “menos burro” **Fonte:** Olhardigital.com.br **Autor:** Bruna Barone **Publicado em:** 2025-02-19T16:00:15Z ![Imagem](https://olhardigital.com.br/wp-content/uploads/2025/02/shutterstock_2549930225-1-scaled.jpg) > Tecnologia estava hospedada ...

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