Arrays
São uma maneira de armazenar dados de um mesmo tipo. Podem ser de dois tipos: estáticos e dinâmicos. Os arrays estáticos têm um tamanho fixo que é definido no momento de sua declaração, enquanto os arrays dinâmicos podem mudar de tamanho durante a execução do contrato.
Declaração de Arrays
Para declarar um array, você especifica o tipo dos elementos que ele conterá, seguido de colchetes []
. Se os colchetes estiverem vazios, o array é dinâmico; se contiverem um número, é estático e o número indica seu tamanho.
pragma solidity ^0.8.0;
contract ExemploArrays {
// Array estático com espaço para 5 inteiros
uint[5] public arrayEstatico;
// Array dinâmico que pode conter um número arbitrário de inteiros
uint[] public arrayDinamico;
}
Operações Básicas
Acesso a Elementos
Você pode acessar elementos de um array utilizando seu Ãndice, começando por 0.
uint valor = arrayEstatico[0]; // Acessa o primeiro elemento do array estático
Alterar Tamanho (Apenas Arrays Dinâmicos)
Para alterar o tamanho de um array dinâmico, você pode usar a função push()
para adicionar um novo elemento ao final do array ou pop()
para remover o último elemento.
arrayDinamico.push(10); // Adiciona o valor 10 ao final do array dinâmico
arrayDinamico.pop(); // Remove o último elemento do array dinâmico
Comprimento do Array
A propriedade length
permite que você obtenha o comprimento de um array, seja ele estático ou dinâmico.
uint comprimento = arrayDinamico.length; // Obtém o comprimento do array dinâmico
A seguir está um exemplo de um contrato que inicializa um array com valores inteiros utilizando push()
e que também pode remover elementos do array utilizando pop()
.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract ArraysDS {
// Declara-se um array dinâmico de tipo inteiro
int[] numbers;
// Função para adicionar valores a um array
function store() public returns (int[] memory) {
numbers.push(5);
numbers.push(10);
numbers.push(20);
return numbers;
}
// Função para retirar o último valor do array
function deleteLastElement() public returns(int[] memory) {
numbers.pop();
return numbers;
}
}
Considerações de Uso
Custo de Gas: As operações que alteram o tamanho de um array dinâmico, como
push
epop
, incidem em custos de gas que podem variar conforme a complexidade da operação.Arrays Multidimensionais: Solidity também suporta arrays multidimensionais, mas tenha em mente que o manuseio desses arrays pode aumentar rapidamente os custos de gas devido à complexidade adicional.
Limitações em Arrays Estáticos: Embora os arrays estáticos possam parecer limitantes, seu tamanho fixo pode ser benéfico para otimizar o uso de gas em certos casos, já que o custo das operações é previsÃvel e não varia.
Last updated