logotipo Blog Giovani Da Cruz
Delphi

Como Ajustar Dinamicamente o Tamanho de Arrays em Delphi/Lazarus

4 min de leitura 136 visualizações
Dynamics arrays in Delphi and Lazarus
Exemplo de uso no Lazarus 3.6

 

Os arrays dinâmicos são uma poderosa ferramenta em Delphi e Lazarus. Eles permitem criar estruturas de dados que podem crescer ou diminuir em tempo de execução, tornando-os ideais para situações onde o número de elementos não é conhecido previamente. Neste post, vamos explorar como declarar, redimensionar e utilizar arrays dinâmicos, com exemplos práticos e casos de uso.

 

O que é um Array Dinâmico?

Um array dinâmico é um tipo de dado que não tem um tamanho fixo definido em tempo de compilação. Ele é declarado sem especificar limites, sendo redimensionado conforme a necessidade durante a execução do programa.

Sintaxe básica:

var
  MeuArray: array of Integer;

Aqui, MeuArray é declarado como um array dinâmico de inteiros, mas ainda não possui espaço alocado.

 

Como Redimensionar Arrays Dinâmicos

Para definir ou alterar o tamanho de um array dinâmico, utilizamos o procedimento SetLength.

Exemplo:

SetLength(MeuArray, 5); // O array agora possui 5 elementos

Depois de redimensionar, os índices começam em 0 e vão até o tamanho definido menos um.

 

Acessando e Modificando Elementos

Após definir o tamanho, você pode acessar ou atribuir valores aos elementos como faria com qualquer array normal.

Exemplo:

MeuArray[0] := 10;
MeuArray[1] := 20;
WriteLn(MeuArray[0]); // Saída: 10
WriteLn(MeuArray[1]); // Saída: 20

 

Casos de Uso Práticos

1. Coleta de Dados em Tempo de Execução

Imagine um programa que solicita ao usuário o número de elementos a serem processados e seus valores. Como o número de entradas não é conhecido de antemão, arrays dinâmicos são ideais.

Exemplo:

var
  Dados: array of Integer;
  i, Quantidade: Integer;
begin
  Write('Quantos números você deseja armazenar? ');
  ReadLn(Quantidade);
  SetLength(Dados, Quantidade);

  for i := 0 to Quantidade - 1 do
  begin
    Write('Digite o número ', i + 1, ': ');
    ReadLn(Dados[i]);
  end;

  WriteLn('Você inseriu os seguintes números:');
  for i := 0 to High(Dados) do
    Write(Dados[i], ' ');
end;

 

2. Manipulação de Listas Variáveis

Ao criar uma aplicação para processar transações ou gerenciar eventos que podem variar, o uso de arrays dinâmicos é eficiente para armazenar entradas conforme elas chegam.

Exemplo:

var
  Transacoes: array of Double;
  i: Integer;
  NovaTransacao: Double;
begin
  i := 0;
  while True do
  begin
    Write('Digite o valor da transação (ou -1 para sair): ');
    ReadLn(NovaTransacao);

    if NovaTransacao = -1 then
      Break;

    SetLength(Transacoes, i + 1);
    Transacoes[i] := NovaTransacao;
    Inc(i);
  end;

  WriteLn('Valores das transações armazenados:');
  for i := 0 to High(Transacoes) do
    WriteLn(FormatFloat('#.##', Transacoes[i]));
end;

 

3. Redução de Uso de Memória

Arrays dinâmicos permitem ajustar o tamanho para liberar espaço desnecessário. Isso é útil em cenários onde o volume de dados varia significativamente.

Exemplo:

var
  Numeros: array of Integer;
begin
  SetLength(Numeros, 100); // Inicialmente alocamos 100 posições

  // Após processar, só precisamos dos 10 primeiros elementos
  SetLength(Numeros, 10); // Libera memória das 90 posições extras
end;

 

Dicas e Boas Práticas

Evite crescer o array dentro de loops intensivos: Cada chamada de SetLength realoca memória, o que pode impactar a performance. Prefira redimensionamentos em lotes.

Use constantes quando possível: Para tamanhos pré-determinados, prefira arrays estáticos para maior eficiência.

Combine com listas genéricas: Se o array dinâmico parecer limitado, considere o uso de TList<T> ou TObjectList<T> para maior flexibilidade.

 

Conclusão

Arrays dinâmicos são uma excelente solução para armazenar e manipular dados de tamanho variável em Delphi e Lazarus. Compreender como redimensioná-los e utilizá-los eficientemente pode melhorar a flexibilidade e a performance de suas aplicações.

 

 

 

O que você achou desse post? 🤔

Compartilhe sua opinião ou conte nos comentários como você utiliza arrays dinâmicos nos seus projetos! 💬👇

 

Lembre de compartilhar este post com amigos e colegas que tenham interesse no assunto! 👫🔗

 

📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩‍💻 🔍✨

Até o próximo post. Valeu! 👋📖

 

 

#Delphi #Lazarus #Desenvolvimento #Programação #ArraysDinâmicos #DicasDeCódigo #Pascal #DevLife #EngenhariaDeSoftware #Programadores

#Development #Programming #DynamicArrays #CodeTips #SoftwareEngineering #Programmers

#GiovaniDaCruz

 

 

Deixe um comentário

Seu e-mail não será publicado.