Usina BRGuía AdvPL
Ingresar
← Todos los temas
FUNDAMENTOPublicado

Matrices (arrays) en AdvPL

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

Organiza valores en listas simples o multidimensionales, accede a posiciones y modifica la estructura dinámicamente.

ArraysMatricesColeccionesEstructuras de datosMemoria
01 · DESCRIPCIÓN GENERAL

Descripción general

Las matrices o arrays son colecciones ordenadas de valores. En AdvPL, el primer elemento ocupa la posición 1 y un mismo array puede contener caracteres, números, fechas, lógicos, objetos, otros arrays y demás tipos. Los arrays anidados permiten representar filas, columnas y estructuras compuestas.

02 · SINTAXIS

Sintaxis

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

Parámetros

aMatriz
ArrayObligatorio

Variable que almacena la colección.

nÍndice
NuméricoObligatorio

Posición del elemento, iniciada en 1 y limitada por el tamaño actual del array.

elemento
QualquerOpcional

Valor almacenado; los elementos del mismo array pueden tener tipos diferentes.

03 · EJEMPLO PRÁCTICO

Creación, acceso y tamaño

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

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

El índice 2 devuelve B y Len() informa que hay tres elementos.

04 · EJEMPLO PRÁCTICO

Inclusión dinámica con AAdd

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

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

AAdd() agrega D y Len() proporciona la última posición actual.

05 · EJEMPLO PRÁCTICO

Estructura con 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

Las constantes nombran semánticamente las posiciones de nombre, edad y estado.

06 · EJEMPLO PRÁCTICO

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 una fila. El bucle recorre las personas y accede a las columnas mediante constantes.

07 · EJEMPLO PRÁCTICO

Acceso 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

La condición impide acceder fuera de los límites actuales.

BUENAS PRÁCTICAS
  • Utiliza llaves para crear un array literal y corchetes para acceder a una posición.
  • Len(aMatriz) devuelve la cantidad de elementos de la dimensión consultada.
  • AAdd(aMatriz, xValor) agrega un elemento al final.
  • Los arrays multidimensionales se acceden como aDatos[nFila, nColumna] o aDatos[nFila][nColumna].
  • Las constantes #define pueden nombrar posiciones y mejorar la legibilidad.
ERRORES COMUNES
  • Acceder a una posición menor que 1 o mayor que Len(aMatriz) provoca un error; valida el índice.
  • Los arrays muy grandes o profundamente anidados pueden consumir mucha memoria. Para grandes volúmenes, considera tablas temporales o procesamiento por partes.
  • La referencia histórica menciona hasta 100.000 elementos para versiones 5.07 a 8.11. No lo trates como límite universal; confírmalo en el AppServer y la LIB utilizados.
  • Al representar registros por posiciones numéricas, mantén constantes y documentación sincronizadas.
  • Los arrays pueden mezclar tipos, pero las rutinas que esperan una estructura específica deben validarlos.

Contenido relacionado

REFERENCIAS
  1. TOTVS. Matrices. TDN. Creado por Rafaela Rocha Hikiji; última modificación el 21 de mayo de 2012.
  2. Guía de referencia de eADVPL. Sin autor identificado, creada el 28 de julio de 2005. Sección relacionada: p. 31–32. Referencia histórica; sintaxis verificada prioritariamente con una fuente actual.
Estado
Publicado
Página creada el
Última revisión el
Idioma original
Portugués
Revisión
Usina.BR