SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
17.11.2024

Lição: 057: Usando a Declaração For em Solidity

Nesta aula, vamos explorar a declaração de laço for em Solidity, que nos permite executar um bloco de código várias vezes. O laço for é particularmente útil quando você precisa manipular coleções de dados, como arrays, ou realizar cálculos repetidos.

O que é um Laço For?

Um laço for consiste em três partes principais:

  1. Inicialização: Isso define uma variável contador com um valor inicial.
  2. Condição: Antes de cada iteração, essa condição é verificada. Se ela for verdadeira, o bloco de código dentro do laço é executado.
  3. Incremento/Decremento: Isso é executado ao final de cada iteração, geralmente modificando a variável contador.

A estrutura de um laço for em Solidity é assim:

for (inicialização; condição; incremento) {
    // Código a ser executado
}

Exemplo 1: Laço For Básico

Vamos ver um exemplo simples onde utilizamos um laço for para iterar sobre um array de inteiros e somá-los.

pragma solidity ^0.8.0;

contract SomarArray {
    uint[] public numeros;

    constructor(uint[] memory _numeros) {
        numeros = _numeros;
    }

    function somar() public view returns (uint) {
        uint total = 0;
        for (uint i = 0; i < numeros.length; i++) {
            total += numeros[i];
        }
        return total;
    }
}

Explicação

  • O construtor inicializa o array numeros.
  • A função somar calcula o total iterando pelo array numeros usando um laço for.
  • numeros.length fornece a contagem total de elementos no array, que serve como nossa condição de laço.

Exemplo 2: Laço For com Lógica Condicional

Neste exemplo, vamos criar um contrato que filtra números pares de um array e os armazena em um array separado.

pragma solidity ^0.8.0;

contract NumerosPares {
    uint[] public numeros;
    uint[] public numerosPares;

    constructor(uint[] memory _numeros) {
        numeros = _numeros;
    }

    function filtrarNumerosPares() public {
        delete numerosPares; // Limpa o array antes de adicionar novos valores
        for (uint i = 0; i < numeros.length; i++) {
            if (numeros[i] % 2 == 0) {
                numerosPares.push(numeros[i]);
            }
        }
    }
}

Explicação

  • Temos dois arrays: numeros (entrada inicial) e numerosPares (para armazenar os resultados filtrados).
  • A função filtrarNumerosPares itera sobre o array numeros e verifica se cada número é par.
  • Se um número for par (numeros[i] % 2 == 0), ele é adicionado ao array numerosPares.

Exemplo 3: Laços For Aninhados

Para operações mais complexas, pode ser necessário usar laços for aninhados. Aqui está um exemplo onde criamos uma tabela de multiplicação.

pragma solidity ^0.8.0;

contract TabelaMultiplicacao {
    uint[][] public tabela;

    constructor(uint tamanho) {
        criarTabela(tamanho);
    }

    function criarTabela(uint tamanho) private {
        for (uint i = 1; i <= tamanho; i++) {
            uint[] memory linha = new uint[](tamanho);
            for (uint j = 1; j <= tamanho; j++) {
                linha[j - 1] = i * j;
            }
            tabela.push(linha);
        }
    }
}

Explicação

  • O contrato TabelaMultiplicacao constrói uma tabela de multiplicação de um tamanho específico.
  • O laço for externo itera sobre cada linha, enquanto o laço for interno calcula o valor de cada coluna.
  • Os resultados são armazenados como linhas da tabela de multiplicação.

Conclusão

Nesta aula, aprendemos como usar o laço for em Solidity. Exploramos alguns exemplos: somando um array, filtrando números pares e criando uma tabela de multiplicação. O laço for é uma ferramenta poderosa para iterar sobre estruturas de dados em contratos inteligentes.

À medida que você escreve contratos inteligentes mais complexos, familiarizar-se com os laços for aprimorará sua capacidade de manipular dados de forma eficiente. Boa codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!