Usina BRAdvPL Guia
Entrar
← Todos os tópicos
FUNDAMENTOPublicado

Matrizes (arrays) em AdvPL

aMatriz := { <elemento1>, <elemento2>, ... } · aMatriz[nÍndice]

Organize valores em listas simples ou multidimensionais, acesse posições e altere a estrutura dinamicamente.

ArraysMatrizesColeçõesEstruturas de dadosMemória
01 · VISÃO GERAL

Visão geral

Matrizes, também chamadas arrays, são coleções ordenadas de valores. Em AdvPL, o primeiro elemento ocupa a posição 1, e uma mesma matriz pode reunir caracteres, números, datas, lógicos, objetos, outros arrays e demais tipos. Arrays aninhados permitem representar linhas, colunas e estruturas compostas.

02 · SINTAXE

Sintaxe

aMatriz := { <elemento1>, <elemento2>, ... } · aMatriz[nÍndice]

Parâmetros

aMatriz
ArrayObrigatório

Variável que armazena a coleção.

nÍndice
NuméricoObrigatório

Posição do elemento, iniciada em 1 e limitada ao tamanho atual da matriz.

elemento
QualquerOpcional

Valor armazenado; elementos da mesma matriz podem possuir tipos diferentes.

03 · EXEMPLO PRÁTICO

Criação, acesso e tamanho

User Function ExMatriz()
    Local aLetras := {"A", "B", "C"}

    MsgInfo("Segundo elemento: " + aLetras[2])
    MsgInfo("Quantidade: " + CValToChar(Len(aLetras)))
Return
Resultado esperado

O índice 2 retorna B e Len() informa que a matriz possui três elementos.

04 · EXEMPLO PRÁTICO

Inclusão dinâmica com AAdd

User Function ExAdicionar()
    Local aLetras := {"A", "B", "C"}

    AAdd(aLetras, "D")
    MsgInfo("Último elemento: " + aLetras[Len(aLetras)])
Return
Resultado esperado

AAdd() acrescenta D ao final; Len() fornece a posição atual do último elemento.

05 · EXEMPLO PRÁTICO

Estrutura com tipos diferentes

#define PESSOA_NOME   1
#define PESSOA_IDADE  2
#define PESSOA_ATIVA  3

User Function ExPessoa()
    Local aPessoa := {"Maria", 32, .T.}

    If aPessoa[PESSOA_ATIVA]
        ConOut(aPessoa[PESSOA_NOME] + " está ativa")
    EndIf
Return
Resultado esperado

As constantes identificam semanticamente as posições que guardam nome, idade e situação.

06 · EXEMPLO PRÁTICO

Matriz multidimensional

#define PESSOA_NOME  1
#define PESSOA_IDADE 2

User Function ExPessoas()
    Local aPessoas := { ;
        {"Pedro", 32}, ;
        {"Maria", 22}, ;
        {"Antônio", 42} }
    Local nLinha

    For nLinha := 1 To Len(aPessoas)
        ConOut(aPessoas[nLinha, PESSOA_NOME] + ;
            " - " + CValToChar(aPessoas[nLinha, PESSOA_IDADE]))
    Next
Return
Resultado esperado

Cada array interno representa uma linha. O laço percorre as pessoas e acessa cada coluna por uma constante.

07 · EXEMPLO PRÁTICO

Acesso protegido por índice

User Function ExIndice(nIndice)
    Local aCores := {"Azul", "Verde", "Vermelho"}

    If nIndice >= 1 .And. nIndice <= Len(aCores)
        MsgInfo(aCores[nIndice])
    Else
        MsgAlert("Posição inválida")
    EndIf
Return
Resultado esperado

A condição impede o acesso fora dos limites atuais da matriz.

BOAS PRÁTICAS
  • Use chaves para criar um array literal e colchetes para acessar uma posição.
  • Len(aMatriz) informa a quantidade de elementos da dimensão consultada.
  • AAdd(aMatriz, xValor) acrescenta um elemento ao final da matriz.
  • Arrays multidimensionais podem ser acessados como aDados[nLinha, nColuna] ou aDados[nLinha][nColuna].
  • Constantes #define podem dar nomes às posições de uma estrutura e tornar o código mais legível.
ARMADILHAS COMUNS
  • Acessar uma posição menor que 1 ou maior que Len(aMatriz) provoca erro; valide o índice antes do acesso.
  • Arrays muito grandes ou profundamente aninhados podem consumir memória significativa. Para volumes elevados, considere tabelas temporárias ou processamento em partes.
  • A referência histórica menciona até 100.000 elementos nas versões listadas entre 5.07 e 8.11. Não trate esse número como limite universal: confirme-o no AppServer e na LIB utilizados.
  • Ao representar registros por posições numéricas, mantenha constantes e documentação sincronizadas para evitar a leitura da coluna errada.
  • Arrays podem conter tipos mistos, mas essa flexibilidade exige validação quando a rotina espera uma estrutura específica.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. Matrizes. TDN. Criado por Rafaela Rocha Hikiji; última alteração em 21 mai. 2012.
  2. Guia de Referência e eADVPL. Documento sem autoria indicada, criado em 28 jul. 2005. Arquivo PDF fornecido ao projeto. Seção relacionada: p. 31–32. Referência histórica; sintaxe conferida prioritariamente em fonte atual.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR