Tempo de leitura: 4 minutos
No desenvolvimento Protheus, trabalhar com coleções de dados exige flexibilidade. Muitas vezes, iniciamos um processo com um array de tamanho fixo, mas precisamos expandi-lo para comportar novos registros ou reduzi-lo para otimizar a memória. A função aSize em ADVPL é a ferramenta nativa para realizar esse redimensionamento, sendo um conceito fundamental em Manipulação de Array.
Neste guia prático, você aprenderá como utilizar a aSize para aumentar ou diminuir arrays, entendendo o comportamento do sistema com valores nulos e descarte de elementos.
O que é a função aSize e como ela funciona?
A função aSize altera o tamanho de um array especificado. O array será ajustado para atingir exatamente o tamanho definido pelo desenvolvedor.
- Ao aumentar o array: Os novos elementos são adicionados ao final da estrutura e recebem inicialmente o valor NIL.
- Ao diminuir o array: Os últimos elementos são descartados permanentemente da memória.
Sintaxe:
aSize( <aDestino>, <nTam> )
Parâmetro(s):
Retorno:
Utilização
A função aSize altera o tamanho do array especificado. O array será aumentado ou diminuído para atingir o tamanho especificado pelo parâmetro nTam.
Se o array for diminuído, os últimos elementos serão descartados. Se o array for aumentado, os novos elementos serão adicionados no final e conterão o valor NIL.
Exemplo 1: Aumentando o Tamanho de um Array
Neste cenário, aumentamos um array de 4 para 5 posições. Note que, ao debugar o código, no momento em que usamos a função aSize para aumentar o array aNomes, a última posição fica com o valor NIL. Por isso, precisamos atribuir um conteúdo a essa nova posição.
No exemplo abaixo em ADVPL podemos ver como utilizar a função aSize para aumentar um array:
#include 'protheus.ch'
/*{Protheus.doc} User Function faSize
-Esse programa tem por finalidade mostrar a função de manipulação de array aSize em ADVPL/TLPP
@type Function
@author Adilio Costa
@since 20/01/2019
@version 1.0
@Participe de nossas comunidades no WhatsApp:
-Comunidade Protheus Backoffice:https://chat.whatsapp.com/KMUIAjwZ6EZ6eAHsLkPTyb
-Comunidade Protheus-RH:https://chat.whatsapp.com/L5dUyAna6xU4ylG5DUgfOW
-Comunidade Protheus-Programação:https://chat.whatsapp.com/LsD6z0apdqKHlOz67bcaEn
-Comunidade Protheus-Framework:https://chat.whatsapp.com/BzUFpjaSnTC3vtsfa77jmG
*/
User Function faSize()
Local cMsg := ""
Local nCont := 0
Local aNomes := {"Adilio","Aline","Roberto","Danilo"}
//Aumentando o tamanho do array de 4 para 5
aSize(aNomes,5)
//A posição 5 possui o valor Nil, agora substituímos esse valor por "Rodrigo"
aNomes[5] := "Rodrigo"
For nCont := 1 To 5
cMsg +="Nome "+cValToChar(nCont)+":"+aNomes[nCont]
If(nCont <> 5)
cMsg += ","
EndIf
Next
MsgAlert(cMsg)
Return
No exemplo abaixo quando debugamos o código podemos ver que no momento que usamos a função aSize para aumentar o array aNomes para o tamanho 5 a última posição ficou com o valor NIL, assim nós tivemos que colocar o conteúdo “Rodrigo” nessa posição 5(aNomes[5] := “Rodrigo”):

Na imagem abaixo podemos ver o nosso array aNomes com o nome “Rodrigo” na posição 5:

Exemplo 2: Diminuindo o Tamanho de um Array
Agora, veja como utilizar a função aSize para reduzir um array. Neste exemplo, diminuímos o array aNomes de 5 para 3 elementos, descartando as duas últimas posições.
No exemplo abaixo iremos utilizar a função aSize para diminuir o array aNomes de 5 para 3:
#include 'protheus.ch'
/*{Protheus.doc} User Function faSize2
(Essa função tem por finalidade mostrar a função de Manipulação de Array aSize em ADVPL)
@type Function
@author Adilio Costa
@since 02/05/2020
@version 1.0
@site https://www.protheusadvpl.com.br
@canal https://www.youtube.com/protheusadvpl
@instagram https://www.instagram.com/protheusadvpl
@Portal ProtheusAdvpl:https://hotmart.com/pt-br/marketplace/produtos/portal-protheusadvpl/O10336806O
@Post:aSize
*/
User Function faSize2()
Local cMsg := ""
Local nCont := 0
Local aNomes := {"Adilio","Aline","Roberto","Danilo","Rodrigo"}
//Diminuindo o tamanho do array de 5 para 3
aSize(aNomes,3)
For nCont := 1 To 3
cMsg +="Nome "+cValToChar(nCont)+":"+aNomes[nCont]
If(nCont <> 3)
cMsg += ","
EndIf
Next
MsgAlert(cMsg)
Return

Domine a Manipulação de Dados no Protheus
Para dominar este conceito em cenários complexos, com aulas em vídeo e suporte especializado, conheça o Portal ProtheusAdvpl. Lá, exploramos a fundo a arquitetura por trás desta função e suas aplicações em grandes projetos.
Cursos Recomendados para Programação:
Conclusão
A função aSize em ADVPL é indispensável para o controle dinâmico de dados no Protheus. Seja para preparar um array para novos dados ou para limpar a memória descartando itens desnecessários, ela oferece a precisão necessária para o desenvolvedor. Dominar a Manipulação de Array é o que diferencia um código eficiente de um sistema lento.
Se você gostou deste guia, confira também nosso artigo sobre Como Adicionar Elementos com aAdd.
Links de referência(s):