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 e pop, 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