Array
Construtor de array com tamanho fixo, todos elementos NIL. Mais explicito que {} + aSize. Util pra inicializar matriz multidimensional.
Assinatura: Array(nTam) -> aArr
Retorna: Array
Array e o construtor de array em AdvPL — cria array com tamanho fixo, todos os elementos NIL. Alternativa ao literal {} quando voce ja sabe o tamanho.
Sintaxe
Array(nTam) --> array unidimensional
Array(nLinhas, nCols) --> array bidimensional (matriz)
Exemplos
// 1D
aArr := Array(5) // {NIL, NIL, NIL, NIL, NIL}
aArr[1] := "primeiro"
aArr[5] := "ultimo"
// 2D
aMatriz := Array(3, 4) // 3 linhas, 4 colunas
aMatriz[1][1] := "topo-esq"
aMatriz[3][4] := "base-dir"
Comparacao com alternativas
// Mesma coisa, tres jeitos
aA := Array(5)
aB := {NIL, NIL, NIL, NIL, NIL}
aC := {} ; aSize(aC, 5)
// Array() e mais explicito quando voce SO quer alocar
// {} e melhor quando voce ja tem os valores
Casos praticos
1. Buffer fixo pra evitar realocacao
// Pre-aloca 1000 posicoes — evita N x aAdd (cada um possivelmente realoca)
Local aLog := Array(1000)
Local nIdx := 0
While !Eof() .And. nIdx < 1000
nIdx++
aLog[nIdx] := SC5->C5_NUM
SC5->(DBSkip())
EndDo
// Trunca o nao usado
aSize(aLog, nIdx)
2. Matriz de dados pra grid
// Grid 10x5 de relatorio
aGrid := Array(10, 5)
aGrid[1][1] := "Cliente"
aGrid[1][2] := "Codigo"
aGrid[1][3] := "Saldo"
aGrid[1][4] := "Vencto"
aGrid[1][5] := "Status"
// Preenche linhas
For i := 2 To 10
aGrid[i][1] := SA1->A1_NOME
aGrid[i][2] := SA1->A1_COD
// ...
Next
Pegadinhas
- Elementos NIL ate atribuir. Operacoes em NIL geram erro.
- 2D nao copia bem — cuidado com aClone em matriz (deep copy verifica).
- Tamanho fixo — pode crescer/encolher com aSize depois.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nTam | Numeric | sim | Tamanho (uni-dimensional). |
nCols | Numeric | não | Colunas (cria 2D). |